這個需求是小駱駝發(fā)起的。感謝 微軟云方案交流 236804566 這個高端群的用戶貢獻。
我們首先看看一個標(biāo)準(zhǔn)的數(shù)組是怎么錄入的
PS D:/> $arr= "adf","asdfer","sredsaf" PS D:/> $arradfasdfersredsaf
這里需要注意的是,雙引號和逗號的分隔。不得不說,這是最簡單的錄入方式,但輸入方式不太友好,需要用戶自己去改PowerShell腳本
為了便于用戶交互,我寫了下面的一個范例
$changdu = Read-Host("請輸入陣列中數(shù)據(jù)長度")$s1= "@{"for($x=0; $x -le $changdu-1; $x++){if($x -ne 0) { $servers = Read-Host('"輸入要增加的計算機名') $s1 = $s1+$x+'="'+$servers+'";' $s1 }if($x -eq 0) { $servers = Read-Host('輸入第一個計算機名') $s1 = $s1+$x+'="'+$servers+'";' $s1 }}$s1 = '$arr='+$s1+"}"$s1echo xx |Out-File d:/3456.ps1$files = (Get-Childitem d:/3456.ps1).pspathclear-content $filesadd-Content $files -Value "$s1"
執(zhí)行的話,效果是這樣的
請輸入陣列中數(shù)據(jù)長度: 4輸入第一個計算機名: asdf@{0="asdf";"輸入要增加的計算機名: ert@{0="asdf";1="ert";"輸入要增加的計算機名: 2345@{0="asdf";1="ert";2="2345";"輸入要增加的計算機名: gadf@{0="asdf";1="ert";2="2345";3="gadf";$arr=@{0="asdf";1="ert";2="2345";3="gadf";} PS D:/> $arr=@{0="asdf";1="ert";2="2345";3="gadf";} PS D:/> $arr Name Value ---- ----- 3 gadf 2 2345 1 ert 0 asdf
最終輸出的是一句話 ,但是這句話是一個字符串,不是數(shù)組,所以要把它輸出到其他文件,然后單獨運行一下。
$arr=@{0="asdf";1="ert";2="2345";3="gadf";}
運行下面的命令就可以了,當(dāng)然這句話也可以加在上面的腳本中。
powershell d:/3456.ps1
以上方法的可以解決需求,問題在于,它需要新創(chuàng)建一個文件,從效率上來說,是低一些,不過用到了循環(huán),用戶體驗上還是很不錯的,所以改一改,我們試一下split方法。
$arr=(read-host("請輸入需要創(chuàng)建的虛擬機名稱,多個虛擬機用英文狀態(tài)下的逗號隔開")).Split(',')
這里用到了split方法,用都好分隔數(shù)據(jù),把他們變成數(shù)組,關(guān)于split方法,下面這個鏈接說的干脆利落很詳細,我這里就不廢話了
//www.jb51.net/article/69147.htm
那么上面的腳本我也可以修改一下,用split方法來處理,這樣好處是在當(dāng)前腳本就可以輸出,以及用戶不需要輸入雙引號和
$changdu = Read-Host("請輸入陣列中數(shù)據(jù)長度")$s1= ""for($x=0; $x -le $changdu-1; $x++){if($x -ne 0) { $servers = Read-Host('"輸入要增加的計算機名') $s1 = $s1+$servers+';' $s1 }if($x -eq 0) { $servers = Read-Host('輸入第一個計算機名') $s1 = $s1+$servers+';' $s1 }}$s2 =($s1).Split(';')echo $s2
新聞熱點
疑難解答
圖片精選