PowerShell是未來微軟管理性Script的主流,過去曾稍微看過,今天總算正式開張,寫了我的第一支PowerShell Script,用途是檢查伺服器上某一個檔案是否順利產生。如果沒看到檔案,表示產生檔案的排程出錯,就要發警告信通知相關人員介入處理。

原本以為接觸一個全新語言會有個充滿挫折感的開始,沒想到PowerShell裡可以直接建立.NET元件!! 原本已經做好得在地上慢慢爬的心理準備,這下子等於又把翅膀領回來,開心到差點從椅子上跌下來。(不過,可以密切整合.NET這點一則以喜一則以憂,學習新語言就該善用新語言的特性,如果一昧只知道用.NET蠻幹,對PowerShell一大片桃花源視而不見,恐怕也非好事。)

好了,我的第一個PowerShelll版管理工具Script如下:

###################################
#Check-File.ps1 by Jeffrey Lee (www.darkthread.net) #
###################################
$AppName = "Check-File.ps1"
$AppVer = "v1.0 [2007-11-23]"
$today = Get-Date -format "yyyyMMdd"
$file = "\\remote_server\share_folder\prefix" + $today + ".txt"
if (Test-Path $file)
{ Write-Host "Pass" -foreground "green" }
else
{
  Write-Host "Fail" -foreground "red"
  $smtp = New-Object System.Net.Mail.SmtpClient
  $smtp.Host = "relay.mail.darkthread.com"
  $smtp.Send("sender@darkthread.com", "recipant@darkthread.com", "File Check Warning", $file + " not found!!")
}

不到20列寫完,簡單到出人意料。Get-Date取得今天日期,Test-Path檢查檔案是否存在,而搬出System.Net.Mail.SmtpClient讓原本以為要大興土木的寄信動作三行打死。以後要遇到要寫Script或小型管理工具的場合,又多了一件順手的新兵器,哈!!

底下是一些相關資源:

1.下載PowerShell 1.0 (PowerShell 2.0 CTP也出來了,只可惜不支援Windows 2003)
http://www.microsoft.com/downloads/details.aspx?FamilyId=10EE29AF-7C3A-4057-8367-C9C1DAB6E2BF&displaylang=en

2.PowerShell CheatSheet,撰寫PowerShell時用的小抄,不過內容略嫌簡單、涵蓋範圍不大,有點不夠用的感覺。
http://www.microsoft.com/downloads/details.aspx?FamilyId=DF8ED469-9007-401C-85E7-46649A32D0E0&displaylang=en

3.PowerShell HelpFile。CHM格式的說明文件,寫得很詳細也很淺顯易讀,是佛心級的好文件,其中VBScript與PowerScript的指令對照表更是功德無量!!!
http://www.microsoft.com/downloads/details.aspx?FamilyId=3B3F7CE4-43EA-4A21-90CC-966A7FC6C6E8&displaylang=en

另外,跑ps1 Script檔時,會先遇到此錯誤:
File C:\Program Files\Console2\check-file.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:15
+ ./check-file.ps1 <<<<

基於安全的理由,ps1 Script預設是不給跑的,記得用以下的指令調整安全設定:
Set-ExecutionPolicy RemoteSigned


Comments

# by Bruce

怎麼每個 script 語言看起來都像是同一個媽媽生的咧! 真有趣..

# by Rex Tang

喔喔喔! 最近也想開始玩 PowerShell, 但是忙著賞楓葉, 被你先學走了...

# by 小李

Jeffrey高手你好: 請問用powershell script來寫可以執行DOS command命令,可不可以給個例子,萬分感謝

# by Jeffrey

to 小李,試試Invoke-Expression,例如: $a = "ipconfig.exe /all &gt; c:\\ipinfo.txt" Invoke-Expression $a

# by 小李

Jeffrey高手你好: 先謝謝你的回應,請問用powershell script,例如檔案的內容要加在字串的尾巴,$string+file語法如何表達,又發送 e-mail如果要attach file,語法又如何表達呢? 再次感謝你的幫忙.

# by NoName

我識答: 舊瓶新酒 # Bruce said on 23 November, 2007 10:00 PM 『怎麼每個 script 語言看起來都像是同一個媽媽生的咧! 真有趣..』

# by Allen

Jeffrey 高手您好. 我將很多串轉進一維陣列,可是一維陣列並不符合我程式的需求,因此我想利用Split(",")的功能轉成二維陣列,可以這樣做嗎?...多謝了...

# by Jeffrey

to Allen, 不明白 "利用Split(",")的功能轉成二維陣列" 的意義,可能需要多一點解釋。

Post a comment


42 + 26 =