PowerShell 脚本简介
什么是 PowerShell
PowerShell 是一种跨平台的任务自动化解决方案,由命令行 shell、脚本语言和配置管理框架组成。 PowerShell 目前已经支持在 Windows、Linux 和 macOS 上运行。
mac 安装 PowerShell
PowerShell 7.3.4
x64 processors - powershell-7.3.4-osx-x64.pkg
https://github.com/PowerShell/PowerShell/releases/download/v7.3.4/powershell-7.3.4-osx-x64.pkg
M1 processors - powershell-7.3.4-osx-arm64.pkg
https://github.com/PowerShell/PowerShell/releases/download/v7.3.4/powershell-7.3.4-osx-arm64.pkg
示例
要确定当前目录位置的路径,请输入命令 Get-Location
设置您的当前位置(设置位置),请使用 Set-Location(cd 或者 chdir 或者 sl)
1 | Set-Location -Path C:\Windows |
保存和调用最近的位置(Push-Location 和 Pop-Location)。当改变地点时,记录你去过的地方并能够返回是很有帮助的 你之前的位置 PowerShell 中的 Push-Location cmdlet 创建有序的历史记录(“stack”)的目录路径,您可以通过目录路径。
枚举文件、文件夹和注册表项
如果要返回直接包含在文件夹中的所有文件和文件夹 C:\Windows,请输入
1 | PS> Get-ChildItem -Path C:\Windows |
-Force 参数用于显示隐藏项或系统项
1 | Get-ChildItem -Path C:\ -Force |
要显示子文件夹中的项目,需要指定 -Recurse 参数
1 | PS> Get-ChildItem -Path C:\WINDOWS -Recurse |
要仅显示项目的名称,请使用 Get-Childitem 的 Name 参数:
1 | PS> Get-ChildItem -Path C:\WINDOWS -Name |
Get-ChildItem 命令在要列出的项的路径中接受通配符。
由于通配符匹配是由 PowerShell 引擎处理的,因此所有接受通配符的 cmdlet 使用相同的符号并具有相同的匹配行为。PowerShell 通配符表示法。
要查找 Windows 目录中以字母 x 开始的所有文件,请键入以下内容:
Get-ChildItem -Path C:\Windows\x*
要查找名称以 “x” 或 “z” 开始的所有文件,请键入:
Get-ChildItem -Path C:\Windows[xz]*
复制文件和文件夹
1 | Copy-Item -Path C:\boot.ini -Destination C:\boot.bak |
如果目标文件已存在,复制尝试将失败。覆盖预先存在的 目的地,使用 Force 参数:
1 | Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force |
文件夹复制的工作方式相同。此命令将文件夹 C:\temp\test1 复制到新文件夹 C:\temp\DeleteMe :
1 | Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe |
创建文件和文件夹
此命令将创建一个新文件夹 C:\temp\New Folder:
1 | New-Item -Path 'C:\temp\New Folder' -ItemType Directory |
此命令创建一个新的空文件 C:\temp\New Folder\file.txt
New-Item -Path ‘C:\temp\New Folder\file.txt’ -ItemType File
注意:使用 Force选项 和 New-Item命令创建文件夹时,文件夹若已存在,则不会覆盖或替换该文件夹。它将简单地返回现有的文件夹对象。但是,如果您对已经存在的文件使用 New-Item -Force,则该文件 被覆盖。
删除文件夹中的所有文件和文件夹
您可以使用 Remove-Item 删除包含的项,但系统将提示您确认 如果该项目包含任何其他内容。例如,如果您试图删除文件夹 C:\temp\DeleteMe 包含其他项,PowerShell提示您确认 删除文件夹:
Remove-Item -Path C:\temp\DeleteMe
如果您不希望每个包含的项都被提示,请指定 Recurse 参数:
Remove-Item -Path C:\temp\DeleteMe -Recurse
将文本文件读入数组
文本数据的一种更常见的存储格式是在文件中,单独的行被视为 不同的数据元素。Get-Content cmdlet可用于在一个步骤中读取整个文件
PS> Get-Content -Path C:\boot.ini
查询服务名称为 “ssh-agent” 的服务。
Get-Service ssh-agent
查询服务名称为“ssh-agent”的服务,若查询到则启动
Get-Service ssh-agent | Set-Service -StartupType Manual
设置为自启动
Set-Service -Name sshd -StartupType ‘Automatic’
输出日志
1 | Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists." |
启动服务
1 | Start-Service sshd |
安装功能
1 | Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 |
卸载功能
1 | Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 |
设置环境变量
追加当前进程的变量
1 | PS> $env:Path+=";C:PowerShellmyscript" |
1 | PS> [environment]::SetEnvironmentvariable("Path", ";c:\powershellscript", "User") |
美化
Home | Oh My Posh
https://ohmyposh.dev/
参考
PowerShell 中文博客 – 收集和分享 Windows PowerShell 相关教程, 技术和最新动态
https://www.pstips.net/