您的位置:首页 > 运维架构 > Shell

PowerShell学习笔记

2009-10-13 17:11 309 查看
WindowsPowerShellBloghttp://powershell.com/cs/blogs/ebook/default.aspx数组的使用:1.在PowerShell中,只要把不同的对象用逗号“,”连接起来,就可以构造出数组对象。PSC:/>$array1=1,2,3,4PSC:/>$array1.count4PSC:/>$array1.GetType().FullNameSystem.Object[]PSC:/>$array[0]1PSC:/>$a="MyThinkPad","MyPC"PSC:/>$a=$a+"MyMac"PSC:/>$aMyThinkPadMyPCMyMac在PowerShell中,数组其实是一个大小固定的数据结构,如果需要向数组中添加更多的对象时,就必须使用加号“+”运算符。在执行“+”操作的过程中,PowerShell实际上进行了下述操作:1)首先创建一个新的数组,该数组的大小能够存下运算结果的所有对象;2)将第一个数组的成员拷贝到新数组中;3)将第二个数组的成员拷贝到新数组中。//////////////////////////////////////////////////如下说明是翻译:helpabout_commonparameters产生的帮助信息.参数描述Verbose布尔值.产生操作执行过程更多的细节信息,有点像跟踪或事务日志.只有支持生成详细信息的cmdlet该参数才有效.Debug布尔值.生成面向程序员处理的详细调式信息.只有支持生成调式信息的cmdlet该参数才有效.ErrorAction枚举.确定错误出现时采取的行动允许值:Continue[default],Stop,SilentlyContinue,Inquire.ErrorVariable字符串.指定在命令执行过程中产生的错误对象保存的变量名称.$error变量会保存相同的错误对象.OutVariable字符串.指定在命令执行过程中产生的对象保存的变量名称.OutBuffer32位整形.确定执行管道线中下一个命令前,需要缓存的对象数量.额外的公共参数,这两个参数只包含在那些会修改系统信息的cmdlet中.参数描述WhatIf布尔值.解释执行cmdlet将产生的各种操作,但不会实际执行该命令.Confirm布尔值.执行任何修改系统的操作时,提示用户,获得允许后才会执行.//////////////////////////////////////////////////////////RandomNumbersinPowerShellWithPowerShell,youcanleveragethe.NETFramework'sSystem.Randomclasstocreaterandomnumbers.Tocreatearandomnumbersyoumustfirstcreateanewrandomnumberobject,thentheobject'smethodstogeneratearandomnumberasfollows:$rand=New-ObjectSystem.Random$rand.next()Ifyouwantarandomnumberbetween0and1,youcanusethe.NextDoublemethodwhichwoulelooklikethis:PSH[D:/foo]:$rand=New-Objectsystem.randomPSH[D:/foo]:$rand.nextdouble()0.370553521611986PSH[D:/foo]:$rand.nextdouble()0.561135980561905Ifyouwanttocreaterandomnumbersthatarebetweentwoothernumbers(e.g.arandomnumberbetween1and10,orbetween4and16),youcanspecifyabottomandtoprangeinacallto.NEXT()asshownhere:PSH[D:/foo]:$rand=New-Objectsystem.randomPSH[D:/foo]:$rand.next(1,10)7PSH[D:/foo]:$rand.next(4,16)14///////////////////////////////////////////////////////##New-GenericObject.ps1##Createsanobjectofagenerictype:####Usage:#####Simplegenericcollection##$list=New-GenericObjectSystem.Collections.ObjectModel.CollectionSystem.Int32#####Genericdictionarywithtwotypes##New-GenericObjectSystem.Collections.Generic.DictionarySystem.String,System.Int32#####Genericlistasthesecondtypetoagenericdictionary##$secondType=New-GenericObjectSystem.Collections.Generic.ListInt32##New-GenericObjectSystem.Collections.Generic.DictionarySystem.String,$secondType.GetType()#####Generictypewithanon-defaultconstructor##New-GenericObjectSystem.Collections.Generic.LinkedListNodeSystem.Int3210##param([string]$typeName=$(throw"Pleasespecifyagenerictypename"),[string[]]$typeParameters=$(throw"Pleasespecifythetypeparameters"),[object[]]$constructorParameters)##Createthegenerictypename$genericTypeName=$typeName+'`'+$typeParameters.Count$genericType=[Type]$genericTypeNameif(-not$genericType){throw"Couldnotfindgenerictype$genericTypeName"}##Bindthetypeargumentstoit[type[]]$typedParameters=$typeParameters$closedType=$genericType.MakeGenericType($typedParameters)if(-not$closedType){throw"Couldnotmakeclosedtype$genericType"}##Createtheclosedversionofthegenerictype,[Activator]::CreateInstance($closedType,$constructorParameters)/////////////////////////////////////////////////////////////////////////SavingDataasanXMLFile>Get-Process|Export-Clixmlc:/scripts/test.xmlReadinginanXMLFile>$A=Import-Clixmlc:/scripts/test.xml////////////////////////////////////////////////////////////////////////ArrangingDataIntoGroups>Get-Service|Group-Objectstatus////////////////////////////////////////////////////////////////////////CalculatingBasicStatisticsMeasure-Objectcmdletprovidesawaytoquicklygeneratestatistics(count,average,sum,minimumandmaximumvalues)>Import-Csvc:/scripts/test.txt|Measure-Objectscore-ave-max-min>Import-Csvc:/scripts/test.txt|Sort-Objectscore-descending|Select-Object-first5///////////////////////////////////////////////////////////////////////ComparingTwoObjectsorTextFiles>$A=Get-Process>$B=Get-Process>Compare-Object$A$B>$A=Get-ContentC:/scripts/x.txt>$B=Get-ContentC:/scripts/y.txt>Compare-Object$A$B////////////////////////////////////////////////////////////////////////DisplayingDataasaListtheFormat-Listcmdletisheretohelpyoudisplayinformationasalist.>Get-Service|Format-List////////////////////////////////////////////////////////////////////////DisplayingDatainMultipleColumns>Get-Process|Format-Wide>Get-Process|Format-Wide-column4>Get-Process|Format-Wide-autosize////////////////////////////////////////////////////////////////////////FilteringReturnedData>Get-Process|Where-Object{$_.handles-gt200}•-lt--Lessthan•-le--Lessthanorequalto•-gt--Greaterthan•-ge--Greaterthanorequalto•-eq--Equalto•-ne--Notequalto•-like–Like;useswildcardsforpatternmatching////////////////////////////////////////////////////////////////////////////ListingtheUniqueMembersofaCollection>Get-Contentfruits.txt|Sort-Object|Get-Unique////////////////////////////////////////////////////////////////////////////LoopingThroughaCollectionofObjects>Get-Process|ForEach-Object{Write-Host$_.name-foregroundcolorcyan}////////////////////////////////////////////////////////////////////////////PausingaWindowsPowerShellScript>Start-Sleep-s10>Start-Sleep-m10000/////////////////////////////////////////////////////////////////////////////PromptingaUsertoEnterInformation>$Name=Read-Host"Pleaseenteryourname">$Password=Read-Host-assecurestring"Pleaseenteryourpassword">$a=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)>$b=[System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($a)/////////////////////////////////////////////////////////////////////////////ViewingDataOneScreenataTime>Get-EventlogPowerShell|Out-Host-paging>Get-EventlogPowerShell|Out-Host-p////////////////////////////////////////////////////////////////////////////WritingaWarningMessagetotheConsoleWindow>Write-Warning"ThefolderC:/scripts2doesnotexist."////////////////////////////////////////////////////////////////////////////WritingMessagestotheConsoleWindow>Write-Host"Thisisredtextonayellowbackground"-foregroundcolorred-backgroundcoloryellow•Black•DarkBlue•DarkGreen•DarkCyan•DarkRed•DarkMagenta•DarkYellow•Gray•DarkGray•Blue•Green•Cyan•Red•Magenta•Yellow•White////////////////////////////////////////////////////////////////////////////////“DotSourcing”aScript#可以看到test.ps1中的变量$c>.C:/scripts/test.ps1>$C////////////////////////////////////////////////////////////////////////////////Creatingabytearray-KeithHill$randArray=New-Objectbyte[]20or$b=[byte[]](1..255)Notethatthefirstexampleisn'texactlywelldocumented.IpickeditupfromanearlierpostthatBruceanswered./////////////////////////////////////////////////////////////////////////////////Firstly,letslookatwhatassembliesareloadedbydefault.[System.Threading.Thread]::GetDomain().GetAssemblies()HereisaneasywaytolistallofthefullyqualifiedpathnamesforallassembliesintheGAC$GacRootDir=Join-Path-Path$Env:SystemRoot-ChildPath"Assembly/Gac"Get-Childitem-path$GacRootDir-recurse-include*.dll|%{$_.FullName}loadanotherassembly[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")///////////////////////////////////////////////////////////////////////////////////Powershell-列出SQL上的database$sPath=[string]"C:/ProgramFiles/MicrosoftSQLServer/90/SDK/Assemblies"#SQLServertoconnectto$sSqlSrv=[string]"SQL2005"#loadtheassembliesneededforSQLSMOfromtheSDK[void][System.Reflection.Assembly]::LoadFile($sPath+"/Microsoft.SqlServer.ConnectionInfo.DLL")[void][System.Reflection.Assembly]::LoadFile($sPath+"/Microsoft.SqlServer.SMO.DLL")[void][System.Reflection.Assembly]::LoadFile($sPath+"/Microsoft.SqlServer.SMOEnum.DLL")#new-upaSQLServerSMOServerobjectreference$oSrv=New-ObjectMicrosoft.SqlServer.Management.Smo.Server($sSqlSrv)#writeSQLVersiontoconsole+linereturnWrite-Host$sSqlSrv"runsSQLServerVersion"$oSrv.Information.VersionWrite-Host"`r"Write-Host"FoundthefollowingDatabaseson"$sSqlSrv":"Write-Host"`r"#enumerateDatabasesonthisserverforeach($oDbin$oSrv.Databases){#writedatabasename/IDtoconsoleWrite-Host"Database:"$oDb.Name"`t""DBID"$oDb.ID}/////////////////////////////////////////////////////////////////////////////////////使用串口RS232#加载编译器[void][reflection.assembly]::LoadWithPartialName("System.IO.Ports")$com1=New-ObjectSystem.IO.Ports.SerialPort$com1.BaudRate=19200#设置波特率$com1.RtsEnable=$True$com1.Open()$com1.ReadExisting()#读取缓存$com1.Close()////////////////////////////////////////////////////////////////////////////////////PowerShell控制台快捷键
按键功能
光标向左移动一个字符
Ctrl+←光标向左移动一个单词
光标向右移动一个字符
Ctrl+→光标向右移动一个单词
Home键光标移动到行首
End键光标移动到行尾
Delete键删除光标指向的字符
Backspace键或Ctrl+H删除光标左边第一个字符
Ctrl+End键删除从光标到行尾的所有字符
Esc键清除当前输入的所有字符
Insert键插入与改写模式切换
Tab键Tab键自动完成命令,例如:自动完成命令的名称、cmdlet命令的参数、路径。如果第一个提示的对象不是您期望的结果,继续输入Tab键,将会自动显示下一个候选对象。
向上查询历史命令
向下查询历史命令
F7键显示命令历史记录,以图形列表窗的形式给出所有曾经输入的命令,并可用%D.G0?;@9q!e-}.L/A*S.q4A上下箭头键选择再次执行该命令。
F8键搜索命令对应的历史记录,在命令上输入命令的一部分内容后,按F8键,可以得到匹配该输入的历史命令。如果有多个匹配项,重复按F8,可以循环显示所有曾经输入的命令。如果命令行为空,则默认匹配所有历史输入的命令。
F9键按编号选择历史命令,以图形对话框方式要求您输入命令所对应的编号(从0开始),并将该命令显示在屏幕上。
Enter键或Ctrl+M回车(Enter)
Ctrl+C终止当前执行的命令
Ctrl+Break终止当前执行的命令
Alt+F7键清除所有曾经输入的命令历史记录
HowtoCreateanObjectinPowerShell
#YoucancompileaclasswithC#orother.NETlanguagesinPowerShellv2
Add-Type@'
publicclassMyObject
{
publicintMyField=5;
publicintxTimesMyField(intx){
returnx*MyField;
}
}
'@

$object=New-ObjectMyObject

$object
$object.XTimesMyField(10)

#Youcanalsouse-asCustomObjectwiththeNew-Modulecmdlettoexportamoduleasaclass
$object=New-Module{
[int]$myField=5
functionXTimesMyField($x){
$x*$myField
}
Export-ModuleMember-Variable*-Function*
}-asCustomObject

$object
$object.xTimesMyField(10)

#Youcanalsosimplydeclareanobjectandstarttackingonpropertiesandmethodswiththe
#Add-Membercmdlet.Ifyouuse-passThruyoucanmakeonegiantpipelinethataddsallofthe
#membersandassignittoavariable

$object=New-ObjectObject|
Add-MemberNotePropertyMyField5-PassThru|
Add-MemberScriptMethodxTimesMyField{
param($x)
$x*$this.MyField
}-PassThru

$object
$object.xTimesMyField(10)
WeneedtotellPowerShelltoparsethelineincommandmode.Todothatweusethecalloperator'&'likeso:PS>&'C:/ProgramFiles/WindowsNT/Accessories/wordpad.exe'Tip:IfitseesoneofthecharactersbelowthenPowerShellparsesinCommandmode:[_aA-zZ]&./Notethatusingthecalloperatorinvokesthecommandinachildscopethatgetsthrownawaywhenthecommand(script,function,etc)exits.PS>$fooPS>&./script.ps1PS>$fooWhendottingascript,thescriptexecutesinthecurrentscope.PS>$fooPS>.C:/Users/Keith/script.ps1PS>$fooPowerShellRocks!PowerShell2.0introducesapropersupportformultilinecommentsasshownbelow.<#ThisisamultilinecommentinPowerShell2.0#>

CreatingaNewObject

Let'sturnourreal-lifepocketknifeintoavirtualpocketknife.UsingNew-Object,PowerShellcangeneratenewobjects,evenavirtualpocketknife.Firstyouneedanewandemptyobject:
$pocketknife=New-ObjectObject

AddingProperties

Next,let'sstartdescribingwhatourobjectis.Todothat,addpropertiestotheobject.[code]#Addinganewproperty:Add-Member-MemberTypeNoteProperty-NameColor-ValueRed-InputObject$pocketknife
[/code]
#Shortenparameternames:Add-Member-MeNoteProperty-In$pocketknife-NaWeight-Value55
#Specifyargumentswithoutparameternamesbypositiondata:Add-Member-InputObject$pocketknifeNotePropertyManufacturerIdera

AddingMethods

#Addinganewmethod:Add-Member-MemberTypeScriptMethod-In$pocketknife`-Namecut-Value{"I'mwhittlingnow"}#Specifyargumentswithoutparameternamesbypositiondata:Add-Member-in$pocketknifeScriptMethodscrew{"Phew...it'sin!"}#Specifying"InputObject"directlythroughthepipeline:$pocketknife|Add-MemberScriptMethodcorkscrew{"Pop!Cheers!"}
Wheneveratypeisanenumeration,youcanuseaspecial.NETmethodcalledGetNames()tolistthepossiblevaluesdefinedinthatenumeration:
[System.Enum]::GetNames([System.ConsoleColor])

ListingAllProperties

$host|Get-Member-memberTypeproperty

ListingAllMethods

$host|Get-Member-memberTypeMethod

StandardMethods

Inaddition,nearlyeveryobjectcontainsanumberof"inherited"methodsthatarealsonotspecifictotheobjectbutperformgeneraltasksforeveryobject:
MethodDescription
EqualsVerifieswhethertheobjectisidenticaltoacomparisonobject
GetHashCodeRetrievesanobject'sdigital"fingerprint"
GetTypeRetrievestheunderlyingobjecttype
ToStringConvertstheobjectintoreadabletext
Table6.2:Standardmethodsofa.NETobjectThisishowyoucouldusePromptForChoice()tocreateasimplemenu:
$yes=([System.Management.Automation.Host.ChoiceDescription]"&yes")$no=([System.Management.Automation.Host.ChoiceDescription]"&no")$selection=[System.Management.Automation.Host.ChoiceDescription[]]($yes,$no)$answer=$host.ui.PromptForChoice('Reboot','Maythesystemnowberebooted?',$selection,1)$selection[$answer]if($answer-eq0){"Reboot"}else{"OK,thennot"}
UsingObjectProperties$object|Get-Member-membertype*property
MemberTypeDescription
AliasPropertyAlternativenameforapropertythatalreadyexists
CodePropertyStatic.NETmethodreturnspropertycontents
PropertyGenuineproperty
NotePropertySubsequentlyaddedpropertywithsetdatavalue
ScriptPropertySubsequentlyaddedpropertywhosevalueiscalculatedbyascript
ParameterizedPropertyPropertyrequiringadditionalarguments
Table6.3:Differentpropertytypes

UsingObjectMethods

[System.DateTime]|Get-Member-static-memberType*method
MemberTypeDescription
CodeMethodMethodmappedtoastatic.NETmethod
MethodGenuinemethod
ScriptMethodMethodinvokesPowerShellcode
Table6.4:Differenttypesofmethods

ListingAssemblies

[AppDomain]::CurrentDomain

[AppDomain]::CurrentDomain.GetAssemblies()

System.Reflection.Assemblytypeprovidesmethodstomanuallyloadadditionalassemblies

from.NETDLLfilesortheglobalassemblycache.

EndFindingInterestingClasses(Types)

$searchtext="*Environment*"[AppDomain]::CurrentDomain.GetAssemblies()|foreach-object{$_.GetExportedTypes()}|where-object{$_-like$searchtext}|foreach-object{$_.FullName}

CreatingNewObjects

$datetime=[System.DateTime]'1.1.2000'$datetime.GetType().FullnameSystem.DateTime$datetime=New-ObjectSystem.DateTime$datetime.GetType().FullnameSystem.DateTime$datetime=Get-Date$datetime.GetType().FullnameSystem.DateTime$datetime=[System.DateTime]::Parse('1.1.2000')$datetime.GetType().FullnameSystem.DateTime

UsingConstructors

[System.String].GetConstructors()|ForEach-Object{$_.toString()}

NewObjectsbyConversion

#Usestrongtypingtosettheobjecttypeof$date:[System.DateTime]$date="November1,2007"$value=[DateTime]"November1,2007"

LoadingAdditionalAssemblies:ImprovedInternetDownload

#Loadrequiredassembly:[void][reflection.assembly]::LoadWithPartialName("Microsoft.VisualBasic")

UsingCOMObjects

WhichCOMObjectsAreAvailable?

DirREGISTRY::HKEY_CLASSES_ROOT/CLSID-includePROGID-recurse|foreach{$_.GetValue("")}
HowDoYouUseCOMObjects?
$object=New-Object-ComObjectWScript.Shell
#Createanobject:$wshell=New-Object-comObjectWScript.Shell#AssignapathtoDesktoptothevariable$path$path=[system.Environment]::GetFolderPath('Desktop')#Createalinkobject$link=$wshell.CreateShortcut("$path/PowerShell.lnk")#$linkisanobjectandhasthepropertiesandmethods$link|Get-Member
#Wecanpopulatesomeoftheproperties$link.TargetPath='powershell.exe'$link.Description='LaunchWindowsPowerShellconsole'$link.WorkingDirectory=$profile$link.IconLocation='powershell.exe'#AndsavethechangesusingSave()method$link.Save()
[/code]

PowerShellPowerBoots

http://powerboots.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=22873

ToInstallinPowerShell2.0(CTP3)

DownloadoneofthePowerBootsfilesbelow(PoshWpfisincluded)UnpackintoyourModulesdirectoryDoublecheck:thefilesshouldbein,eg:...Documents/WindowsPowerShell/Modules/PowerBootsRunImport-ModulePowerBootsfromPowerShelloraddthattoyourprofilePowerShell.exe-STA-----------必须在STA模式下###ImportPoshWpfmoduleImport-ModulePowerBoots$Window=Window-SizeToContentWidthAndHeight-Content(Button-Content"PushMe")$Window.ShowDialog()PowerShell.exe–stadoesn’tloadupWPF’sassemblies,letsrunthesethreelinestoaddthereferences:Add-Type–assemblyNamePresentationFrameworkAdd-Type–assemblyNamePresentationCoreAdd-Type–assemblyNameWindowsBase也可以这样PowerShell编写WPF代码的经验总结PowerShell要在-STA模式下运行程序。要加载相应的库PresentationFramework,PresentationCore,WindowsBase.方法是:Add-Type–assemblyNameWindowsBase如果要导入C#代码要加入-ReferencedAssemblies("PresentationCore","PresentationFramework","WindowsBase")显示窗口时要用win.ShowDialog()而不能用win.Show()也不能有Application对象。HowToWriteaConsoleApplicationinPowerShellwithAdd-TypeAdd-Type-OutputTypeConsoleApplication-OutputAssemblyHelloWorld.exe@"usingSystem;publicclassMyProgram{publicstaticvoidMain(string[]args){Console.WriteLine("HelloWorld");}}"@
#Loadrequiredassembly:[void][reflection.assembly]::LoadWithPartialName("PresentationFramework")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: