PowerShell ç¨äºèªå¨åä»»å¡åé 置管çç常ç¨å½ä»¤çå¤å¿æ¸ åï¼å¯å¸®å©ç³»ç»ç®¡çåå¿«éåèå¸¸ç¨æä½ã
PowerShell çå½ä»¤éµå¾ªå¨è¯-åè¯æ ¼å¼ ä¸äºå¸¸è§çå¨è¯:
| å¨è¯ | æè¿° |
|---|---|
| Get | ç¨äºæ£ç´¢ä¿¡æ¯ |
| Set | ç¨äºé ç½®ææ´æ¹è®¾ç½® |
| New | ç¨äºå建æ°å¯¹è±¡å®ä¾ |
| Remove | ç¨äºå é¤æç§»é¤é¡¹ç® |
| Invoke | ç¨äºæ§è¡ç¹å®çæä½æå¨ä½ |
| Start | ç¨äºå¯å¨è¿ç¨ææä½ |
| Stop | ç¨äºåæ¢æç»æ¢è¿ç¨ææä½ |
| Enable | ç¨äºæ¿æ´»æå¯ç¨åè½ |
| Disable | ç¨äºåç¨æç¦ç¨åè½ |
| Test | ç¨äºæ§è¡æµè¯ææ£æ¥ |
| Update | ç¨äºæ´æ°æå·æ°æ°æ®æé ç½® |
ååºå¯ç¨æ¨¡å
Get-Module --ListAvailable
ååºå¯ç¨ç cmdlet å彿°
Get-Command -Module ActiveDirectory
ååºå«ååå ¶å¯¹åºç cmdlet åç§°
Get-Alias | Select-Object Name, Definition
è·å帮å©
Get-Help <cmd>
Get-Help <cmd> -Examples
Get-Help -Name Get-Process -Parameter Id
Get-Member: æ¾ç¤ºå¯¹è±¡ç屿§åæ¹æ³
Get-Process | Get-Member
Select-Object: éæ©å¯¹è±¡çç¹å®å±æ§æèªå®ä¹å ¶æ¾ç¤º
Get-Process | Select-Object Name, CPU
Where-Object: æ ¹æ®æå®æ¡ä»¶è¿æ»¤å¯¹è±¡
Get-Service | Where-Object { $PSItem.Status -eq 'Running' }
#OR
Get-Service | ? { $_.Status -eq 'Running' }
Measure-Object: 计ç®å¯¹è±¡å±æ§çç»è®¡ä¿¡æ¯ï¼å¦æ»åãå¹³åå¼å计æ°
Get-Process | Measure-Object -Property WorkingSet -Sum
ForEach-Object: 对éåä¸çæ¯ä¸ªå¯¹è±¡æ§è¡æä½ï¼æ³¨æï¼ä»¥ä¸å½ä»¤å°ä¸ºå½åç®å½ä¸çæä»¶/æä»¶å¤¹æ·»å åç¼ï¼
Get-ChildItem | ForEach-Object { Rename-Item $_ -NewName "Prefix_$_" }
Sort-Object: ææå®å±æ§å¯¹å¯¹è±¡è¿è¡æåº
Get-ChildItem | Sort-Object Length -Descending
Format-Table: å°è¾åºæ ¼å¼å为带ææå®åçè¡¨æ ¼
Get-Service | Format-Table -AutoSize # ft alias
Format-List: å°è¾åºæ ¼å¼åä¸ºå±æ§åå¼çå表
Get-Process | Format-List -Property Name, CPU # fl alias
New-Item -path file.txt -type 'file' -value 'contents'
New-Item -path file.txt -type 'dir'
Copy-Item <src> -destination <dest>
Move-Item -path <src> -destination <dest>
Remove-Item <file>
Test-Path <path>
Rename-Item -path <path> -newname <newname>
# using .NET Base Class Library
[System.IO.File]::WriteAllText('test.txt', '')
[System.IO.File]::Delete('test.txt')
Get-Content -Path "test.txt"
Get-Process | Out-File -FilePath "processes.txt"# è¾åºå°æä»¶
Get-Process | Export-Csv -Path "processes.csv" # è¾åºå° CSV
$data = Import-Csv -Path "data.csv" # ä» CSV 导å
¥
# è·å BIOS ä¿¡æ¯
Get-CimInstance -ClassName Win32_BIOS
# è·åæ¬å°è¿æ¥çç©çç£ç设å¤ä¿¡æ¯
Get-CimInstance -ClassName Win32_DiskDrive
# è·åå®è£
çç©çå
åï¼RAMï¼ä¿¡æ¯
Get-CimInstance -ClassName Win32_PhysicalMemory
# è·åå®è£
çç½ç»éé
å¨ï¼ç©ç + èæï¼ä¿¡æ¯
Get-CimInstance -ClassName Win32_NetworkAdapter
# è·åå®è£
çå¾å½¢/æ¾å¡ï¼GPUï¼ä¿¡æ¯
Get-CimInstance -ClassName Win32_VideoController
ååºææç±»å
Get-CimClass | Select-Object -ExpandProperty CimClassName
æ¢ç´¢ root\cimv2 å½å空é´ä¸çåç§ WMI ç±»
Get-CimClass -Namespace root\cimv2
æ¢ç´¢ root\cimv2 å½å空é´ä¸çå WMI å½å空é´
Get-CimInstance -Namespace root -ClassName __NAMESPACE
# æµè¯ä¸è¿ç¨ä¸»æºçç½ç»è¿æ¥
Test-Connection -ComputerName google.com
# è·åç½ç»éé
å¨ä¿¡æ¯
Get-NetAdapter
# è·å IP å°åä¿¡æ¯
Get-NetIPAddress
# è·åè·¯ç±è¡¨ä¿¡æ¯
Get-NetRoute
# æµè¯è¿ç¨ä¸»æºä¸çç«¯å£æ¯å¦å¼æ¾
Test-NetConnection google.com -Port 80
# è·åæ¬å°ç¨æ·è´¦æ·ä¿¡æ¯
Get-LocalUser
# å建æ°çæ¬å°ç¨æ·è´¦æ·
New-LocalUser -Name NewUser -Password (ConvertTo-SecureString "Password123" -AsPlainText -Force)
# å 餿¬å°ç¨æ·è´¦æ·
Remove-LocalUser -Name UserToRemove
# è·åæ¬å°ç»ä¿¡æ¯
Get-LocalGroup
# å°æåæ·»å å°æ¬å°ç»
Add-LocalGroupMember -Group Administrators -Member UserToAdd
è·åæä»¶/ç®å½çè®¿é®æ§å¶å表
Get-Acl C:\Path\To\File.txt
设置æä»¶/ç®å½çè®¿é®æ§å¶å表
Set-Acl -Path C:\Path\To\File.txt -AclObject $aclObject
# è·å注å表é®å¼
Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Select DisplayName, DisplayVersion
# 设置注å表é®å¼
Set-ItemProperty -Path "HKLM:\Software\MyApp" -Name "SettingName" -Value "NewValue"
# å建æ°ç注å表é®å¼
New-ItemProperty -Path "HKCU:\Software\MyApp" -Name "NewSetting" -Value "NewValue" -PropertyType String
# å 餿³¨å表é®å¼
Remove-ItemProperty -Path "HKCU:\Software\MyApp" -Name "SettingToRemove"
# æ£æ¥æ³¨åè¡¨é®æ¯å¦åå¨
Test-Path "HKLM:\Software\MyApp"
åå§ååéï¼æå®æä¸æå®ç±»åï¼
$var = 0
[int] $var = 'Trevor' # (æåºå¼å¸¸)
[string] $var = 'Trevor' # (ä¸ä¼æåºå¼å¸¸)
$var.GetType()
# å¤éèµå¼
$a,$b,$c = 'a','b','c'
# å建æ°ç»
$arrayvar = @('va1','va2')
# å建åå
¸
$dict = @{k1 = 'test'; k2 = 'best'}
åéå½ä»¤
New-Variable -Name FirstName -Value Trevor
New-Variable FirstName -Value Trevor -Option <ReadOnly/Constant>
Get-Variable
Get-Variable | ? { $PSItem.Options -contains 'constant' }
Get-Variable | ? { $PSItem.Options -contains 'readonly' }
Remove-Variable -Name firstname
# å é¤åªè¯»åé
Remove-Variable -Name firstname -Force
åéç±»åï¼int32, int64, string, bool
# è¿ç®ç¬¦
# (a <op> b)
= , += / -= , ++ / --
-eq / -ne , -lt / -gt , -le / -ge
$FirstName = 'Trevor'
$FirstName -like 'T*'
$true; $false # å¸å°å¼ true/false
# ä¸å
è¿ç®ç¬¦
$FoodToEat = $BaconIsYummy ? 'bacon' : 'beets'
# -notin æ -in
'Celery' -in @('Bacon', 'Sausage', 'Steak')
# è¾åº: True
5 -is [int32]
# æ£å表达å¼å¹é
ï¼å¯ä»¥ä½¿ç¨æ°ç»
'Trevor' -match '^T\w*'
# æ¥æ¾å¤ä¸ªå¹é
项
$regex = [regex]'(\w*)'
$regex.Matches('this is test').Value
"This displays a string"
Write-Host "color" -ForegroundColor Red
$age = Read-host "Enter age"
$pwd = Read-host "password" -asSecureString
Clear-Host
IF(<#Condition#>){
<#Commands#>}ELSEIF(){}ELSE{}
Switch($var){
"val1"{<#Commands#>; break}
"val2"{<#Commands#>; break}
}
For($ct=0;$ct -le 3;$ct++){}
ForEach($var in $arr){}
while($var -ne 0){}
Do{}While()
function funcname{
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[String]$user
)
Write-Host "welcome " $user
return "value"
}
$var = funcname -user pcb
function Get-EvenNumbers {
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline = $true)]
[int] $Number
)
begin {<#command#>}
process {
if ($Number % 2 -eq 0) {
Write-Output $Number
}
}
end {<#command#>}
}
1..10 | Get-EvenNumbers
# PowerShell å¨è·¯å¾ä¸æ¥æ¾æ¨¡å
$env:PSModulePath
# ååºç³»ç»ä¸å®è£
çæææ¨¡å
Get-Module -ListAvailable
# ååºå½åä¼è¯ä¸å¯¼å
¥ç模å
Get-Module
Import-Module <moduleName>
Remove-Module <moduleName>
Find-Module -Tag cloud
Find-Module -Name ps*
# å建ä¸ä¸ªå
åä¸ç PowerShell 模å
New-Module -Name trevor -ScriptBlock {
function Add($a,$b) { $a + $b } }