Windows Powershell 命令返回数组
当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。
但是,事实上Powershell会把文本按每一行作为元素存为数组。如果一个命令的返回值不止一个结果时,Powershell也会自动把结果存储为数组。
PSC:Powershell>$IPcfg=ipconfig PSC:Powershell>$IPcfg WindowsIPConfiguration EthernetadapterLocalAreaConnection: Connection-specificDNSSuffix.:*** Link-localIPv6Address.....:*** IPv4Address...........:192.168.140.128 SubnetMask...........:255.255.252.0 DefaultGateway.........:192.168.140.1 Tunneladapterisatap.mossfly.com: Connection-specificDNSSuffix.:*** Link-localIPv6Address.....:*** DefaultGateway.........:*** TunneladapterTeredoTunnelingPseudo-Interface: MediaState...........:Mediadisconnected Connection-specificDNSSuffix.: PSC:Powershell>$IPcfg.Count 22
使用数组存储结果
判断一个变量是否为数组
PSC:Powershell>$ip=ipconfig PSC:Powershell>$ip-is[array] True PSC:Powershell>"abac"-is[array] False PSC:Powershell>$str="字符串" PSC:Powershell>$str.ToCharArray()-is[array] True
查看数组的元素个数用$array.Count属性。访问第x个元素,使用$array[x-1],因为数组是以0开始索引的。
使用管道对数组进一步处理
PSC:Powershell>ipconfig|Select-String"IP" WindowsIPConfiguration Link-localIPv6Address.....:*** IPv4Address...........:*** Link-localIPv6Address.....:***
使用真实的对象操作
为什么不愿把IPconfig返回的结果称为对象,因为它不是真正Cmdlet命令,真正的Powershell命令返回的数组元素可不止一个字符串,它是一个内容丰富的对象。
PSC:Powershell>ls Directory:C:Powershell ModeLastWriteTimeLengthName --------------------------- d----2011/11/2317:25ABC d----2011/11/2918:21myscript -a---2011/11/2418:3067580a.html -a---2011/11/2420:0426384a.txt -a---2011/11/2420:2612060alias -a---2011/11/2420:2712060alias.ps1 -a---2011/11/2317:250b.txt -a---2011/11/2317:250c.txt -a---2011/11/2317:250d.txt -a---2011/11/2511:20556employee.xml -a---2011/11/2919:2321466function.ps1 -a---2011/11/2811:12186LogoTestConfig.xml -a---2011/11/2417:377420name.html -a---2011/11/2815:3063ping.bat -a---2011/11/2417:44735892Powershell_Cmdlets.html -a---2011/11/3016:042556psdrive.html -a---2011/12/218:47140test.ps1 -a---2011/11/2317:37242test.txt -a---2011/11/2816:42170test.vbs PSC:Powershell>$result=ls PSC:Powershell>$result.Count 20
数组的每一个元素存放的是一个System.IO.DirectoryInfo对象。
当我们输出这些对象时,Powershell会自动帮我们把它转换成友好的文本格式。
PSC:Powershell>$result[0].gettype().fullname System.IO.DirectoryInfo PSC:Powershell>$result[0] Directory:C:Powershell ModeLastWriteTimeLengthName --------------------------- d----2011/11/2317:25ABC对于任何一个对象都可以使用Format-List*查看它所有的属性和方法。 PSC:Powershell>$result[0]|fl* PSPath:Microsoft.PowerShell.CoreFileSystem::C:PowershellABC PSParentPath:Microsoft.PowerShell.CoreFileSystem::C:Powershell PSChildName:ABC PSDrive:C PSProvider:Microsoft.PowerShell.CoreFileSystem PSIsContainer:True BaseName:ABC Mode:d---- Name:ABC Parent:Powershell Exists:True Root:C: FullName:C:PowershellABC Extension: CreationTime:2011/11/2317:25:53 CreationTimeUtc:2011/11/239:25:53 LastAccessTime:2011/11/2317:25:53 LastAccessTimeUtc:2011/11/239:25:53 LastWriteTime:2011/11/2317:25:53 LastWriteTimeUtc:2011/11/239:25:53 Attributes:Directory