首先關於運行:
在shell裏面運行一個腳本的話,你需要set-executinopolicy設爲RemoteSigned。運行一個腳本在shell裏面打腳本名即可。
如果是在run裏面,就要打powershell-file"路徑和腳本文件名",如果你要看到輸出信息,那麼可以加上-noexit選項。
如果是在schedule裏面計劃運行,那麼和run差不多,在startaprogram之後,打入你在run裏面會用的命令行,即可。
基本語法:
保留字:breakcontinuedoelseelseiffilterforforeachfunctionifinlocalprivatereturnswitchuntilwherewhile
數組:定義方法$name="string1","string2","string3"或者$number=@(1,2,3,4,5)
引用時$name[n]下標從0開始。$name.Count是數組大小
數組可以相加$num1+$num2就是簡單的兩個數組拼接。
數組的長度:$num.length
也可以定義鍵-值對的數組,叫做associativearray。
讀取輸入
$var=Read-Host"question?"var是變量名,引號裏是提示問題。
暫停程序
Start-Sleep-secondsn要等待的秒數
條件判斷
-eq-ne-lt-gt-le-gt
-not!-and-or這是邏輯比較用到的操作符
if(condition){}
elseif(condition){}
...
else{}
以及switch
switch(expression)
{
{test}{codeblock}
value{codeblock}
default{codeblock}
}value是指和expression比較的值
while循環
while(表達式){
...
}
或者
do{
}while(表達式)
表達式可以是$var-eq"";$var-ne"";(表達式1)-and(表達式2)-and(表達式3)
for循環
for(初始化;表達式;STEP){}以及
foreach($name1inCollection1){$name1相關代碼....}
返回的集合的處理
get-childitem|Select-Objectpropname1,propname2,propname3
其他有sort-Object;Where-Object;
如get-childitem|sort-object|Where-Object{$_.Length-gt200}這裏$_代表集合裏當前成員。
定義函數
functionfuncname{...}
funcitonfuncname($x,$y,$z){...}
導入導出CSV文件
export-csvPAth\filname.csv
$csvfil=import-csvPath\filname.csv
***系統管理的一些例子:
獲取USB設備:
gwmiWin32_USBControllerDevice-computernameSERVER1|flAntecedent,Dependent
要知道有多少USB設備?
$USBdev=gwmiWin32_USBControllerDevice
write$USBdev.length
中止一個進程:stop-process-idnnnn
輸出顯示的慢一點:
定義一個函數
functionEasyView{process{$_;Start-Sleep-seconds.5}}
然後,對於輸出很多行的命令,
Get-ChildItemN:Data|EasyView
把電腦加入域:
# Acquire credentials for a domain account that has permission to join
$admin = Get-Credential
# these two variables are for convenience in shortening the command line
$user = $admin.UserName
$pw = $admin.GetNetworkCredential().Password
$CS = Get-WmiObject Win32_ComputerSystem
$CS.JoinDomainOrWorkgroup("DOMAIN",$pw,$user,$null,3)
***用於Exchange的命令
獲得郵箱的統計報告,並排序
Get-MailboxStatistics–ServerVAN-EX1|Sort-ObjectTotalItemSize–Descending|
FTDisplayName,TotalItemSize,ItemCount
如果只要顯示開頭5個
Get-MailboxStatistics–ServerVAN-EX1|Sort-ObjectItemCount–Descending|Select-
Object–First5|FTDisplayName,ItemCount
如果要生成一個證書請求並保存爲文件
$Data1=New-ExchangeCertificate-GenerateRequest-FriendlyName"Internetcertificate
forVAN-EX2"-SubjectName"DC=com,DC=Adatum,CN=VAN-EX2.adatum.com"-DomainNamemail
.adatum.com
Set-Content-Path"C:\Certificates\VAN-EX2-request.req"-Value$Data1
注意:Set-Content是吧某個文件的內容替換,Add-Content是添加在後面。
管理活動目錄裏的對象
首先你要import-module ActiveDirectory
創建一個用戶, New-ADuser -samAccountName 參數是登錄用名
-GivenName -Surname -AcountPassword 這些都是必要的參數
在創建用戶的時候要看看同登錄名的用戶是不是已經存在:
$exuser = get-ADuser -Filter {SamAccountName -eq $SAM}
if ($exuser -eq $Null)
{ $create = New-ADuser -Name $Detailname -Givenname $firstname -Surname $lastname -SamaccountName $SAM -UserPrincipalName $UPN -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Enabled $true -Path $OU -Company $company -Department $dept
}
else {
echo "The user with samaccount " $SAM " already exist, please create it maually."
Break
}
echo "account created OK."
發送郵件
$outlook = new-object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0)
# 這裏0代表olMailItem類型,
$subject = "New User Information "
$mail.Recipients.Add("[email protected]")
$mail.subject = $subject
$mail.body = ("Hello All," + "`r`n" + "`r`n" + "New User Information" + "`r`n" + "First Name :" + " " + $UserFirstname + "`r`n" + "Last Name :" + " " + $lastname +"`r`n" + "Contoso ID# :" + " " + $ID + "`r`n" + "Position :" + " " + $title + "`r`n" + "AD Account Created" + "`r`n" )
$mail.Send()
這個腳本運行時,outlook會反覆彈出確認授權執行的提示,按照微軟網站設了組策略,仍然是這樣,不知道有誰知道怎麼才能去掉彈出對話框。
系統啓動時執行power shell的腳本。
這個可以設置註冊表。
$powershell = (Join-Path $env:windir "system32\WindowsPowerShell\v1.0\powershell.exe")
$RunKey ="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$itemName = "MyAutorun"
set-ItemProperty -path $RunKey -name $itemName -value ($powershell 腳本路徑名和參數)
如果不要自動運行了,
remove-ItemProperty -path $RunKey -name $itemName 即可