powershell 7 之后是根据 dotnet core 开发的, 具有跨平台功能. powershell 脚本里面不区分大小写, 包括变量和关键字
注释以 #开头
查看执行策略Get-ExecutionPolicy
设置执行策略Set-ExecutionPolicy xxx
执行策略种类:
- Restricted: 所有脚本都不能执行
- AllSigned: 所有脚本都需要签名才能运行(win10 默认)
- RemoteSigned: 本地脚本可以直接运行, 网络下载的脚本需要签名
- Unrestricted: 所有脚本都能运行, 但是网络脚本会有警告
- Bypass: 所有脚本都能运行, 且没有警告
另外还有两个特殊的:
- Default: 默认 Restricted
- Undefined: 作用域的执行策略
字符串
"Hello, wordld!"
整形,浮点
boolean
$true, $false
数组
@("apple", "banana", "orange")
哈希表
@{"name"="john"; "age"=30, "isMarried"=$false}
对象
- eq: 判断相等
- nq: 判断不相等
- gt: 大于
- ge: 大于等于
- lt: 小于
- le: 小于等于 -like 正则表达式匹配
单个值和多个值进行比较, 返回的是 boolean 值
多个值和单个值进行比较, 返回符合条件
的值
条件判断
if ($age -gt 18) {
Write-Host "your age is $age, and > 18"
} elseif ($age -lt 60) {
Write-Host "your age < 60"
} else {
Write-Host "---"
}
循环
$array = @("apple", "banana", "orange")
foreach ($item in $array) {
Write-Host $item
}
$hash = @{"name"="John"; "age"=30; "isMarried"=$false}
foreach ($key in $hash.Keys) {
Write-Host "$key: $($hash[$key])"
}
$i = 0
while ($i -lt 5) {
Write-Host $i
$i++
}
函数
function Greet($name) {
Write-Host "Hello, $name!"
}
powershell 的 cmelet 是以动词-名词
的规范进行命名的
常见的动词有:
Get
, Set
, Start
, Stop
, Restart
, Wait
常见的名词有:
Process
, Service
, Item
# Set-Location:切换当前目录。
Set-Location C:\Windows
# Get-ChildItem:获取目录中的文件和子目录的列表。
Get-ChildItem C:\Windows
# New-Item:创建新文件或目录。
New-Item -ItemType Directory -Path C:\Temp
New-Item -ItemType File -Path C:\Temp\test.txt
# Copy-Item:复制文件或目录。
Copy-Item C:\Temp\test.txt C:\Windows
Copy-Item C:\Temp\*.* C:\Windows
# Move-Item:移动文件或目录。
Move-Item C:\Temp\test.txt C:\Windows
Move-Item C:\Temp\*.* C:\Windows
# Remove-Item:删除文件或目录。
Remove-Item C:\Temp\test.txt
Remove-Item C:\Temp -Recurse
Test-Connection:测试网络连接。
Test-Connection http://google.com
Test-NetConnection:测试网络连接。
Test-NetConnection http://google.com -Port 80
Get-NetIPAddress:获取网络接口的 IP 地址。
Get-NetIPAddress
Get-NetAdapter:获取网络接口的信息。
Get-NetAdapter
Stop-Process:停止指定的进程。
Stop-Process -Name notepad
Restart-Service:重启指定的服务。
Restart-Service -Name Spooler
Set-Service:设置指定服务的启动类型。
Set-Service -Name Spooler -StartupType Automatic
Get-EventLog:获取事件日志的信息。
Get-EventLog -LogName Application -Newest 10
Get-Acl:获取文件或目录的访问控制列表。
Get-Acl C:\Windows
Set-Acl:设置文件或目录的访问控制列表。
Set-Acl C:\Windows -AclObject $acl
Select-Object:选择对象的属性。
Get-Process | Select-Object Name, CPU, Memory
Where-Object:根据条件筛选对象。
Get-Process | Where-Object CPU -gt 50
ForEach-Object:对每个对象执行操作。
Get-ChildItem | ForEach-Object { $_.FullName }
Invoke-Command:在远程计算机上执行命令。
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }