PowerShell对于微软来说完全是件复杂差事,它曾经想转换成图形界面但其竞争对手都还基本停留在基于命令行的阶段。它的目的是要为管理员建立一个像Unix一样的Shell,在提供高级脚本功能的同时仍然保留易用的特性。
PowerShell最初的代号为Monad,原本是具有面向对象Shell特性以取代Windows的命令行提示符,同时和Unix系统上类似功能的Shell一较高下。然而,微软改变了计划,它表示要完全完成这项技术还要若干年时间。
目前,PowerShell主要面向运行如Exchange 2007等Windows软件的IT经理,管理员将能够在命令行中完成图形界面提供的所有功能。
PowerShell的开发人员Alex Heaton表示,可以把PowerShell看成是Windows命令行提示符(cmd.exe)和VBScript的整合体。
Windows PowerShell的12项酷功能
1. 内置Cmdlets (即"commandlets")
Windows PowerShell中的所有Cmdlets都允许这样的动名词:get-service, get-process, stop-service, get-wmiobject.
2. 强大的通配符和操作对象
要得到以w开头的服务及其依赖服务只要输入:
PS> get-service w* | format-list DisplayName, DependentServices
3. 在犯错误前测试命令
Windows PowerShell 有意向独特的功能:Whatif ,可以不执行命令就告诉你命令执行结果.如:
PS> stop-service w3* -whatif
4. 获取副本
PowerShell 可以开始和结束所有命令的副本,可以在脚本中轻易测试命令并同时保存.
PS> Start-Transcript -Path c:demodfoshow.txt
PS> Stop-Transcript
5. 从命令行发布Windows对话
因为Windows PowerShell位对象而优化,可以向.NET Framework一样从命令行访问COM对象,下列命令告诉你的Vista机器发表"Windows Vista and PowerShell"字串.
PS> $spVoice = new-object -com "SAPI.spvoice"
PS> $spVoice.Speak("Windows Vista and PowerShell")
6. 使用Windows PowerShell访问诸如Windows Media Player 11等的应用程序
PS> $band = "The Posies"
PS> $player = New-object -com wmplayer.ocx
PS> $playlist = $player.mediacollection.getbyauthor($band)
PS> $player.openPlayer($playlist.item(0).sourceurl)
7. Windows PowerShell作为命令行存储计算器
PowerShell可以完成基本的计算工作
PS> 2*2
不过,Windows PowerShell也可以快速解决存储问题,例如,备份11GB的数据需要多少个700MB的CD.
PS> 11gb/700mb
那么,需要多少个1000GB的存储来备份每个320GB,共425个的Vista桌面呢?
PS > (320gb*425)/1000GB
8. PowerShell 用作日历计算
计算多少天到新年:
PS> ([DateTime]"1/1/2007" -[datetime]::now).days
9. 返回机器上某种类型文件的数量
Windows Vista有许多类型的事件记录和组策略文件等.下列命令是返回当前目录及其子目录中VBScript, Bat 和 PowerShell 脚本的数量:
PS> dir -include *.vbs, *.ps1, *.bat -recurse | group-object extension -noelement
10. 从命令行收集Windows System Assessment Tool数据
PS> get-wmiobject win32_winsat | format-table __SERVER, *SCORE -autosize
PS> get-wmiobject win32_winsat | select *score | out-chart -Title "System Assessment Scores by PowerGadgets"
11. 配置UAC(User Account Control)
PS> set-itemproperty -path HKLM:SOFTWAREMICROSOFTWINDOWSCurrentVersionPoliciesSystem -name ConsentPromptBehaviorAdmin -value 0
12. 管理BitLocker
PS > $drives = get-wmiobject -namespace rootCIMv2SecurityMicrosoftVolumeEncryption -class Win32_EncryptableVolume
PS> $drives | format-table DriveLetter, PersistentVolumeID -autosize
PS> $BitLockDrive = $drives[0]
PS> $BitLockDrive.GetProtectionStatus()
PS> $BitLockDrive.DisableKeyProtectors()
PS> $BitLockDrive.EnableKeyProtectors()