2013-03-20 21 views
1

我是Powerhell中的新手,但非常希望能夠很好地使用它。我工作的一個腳本,應該做到以下幾點:powershell條件不處理數組中的所有值

  • 檢查特定文件夾中的特定位置的存在(映射驅動器)
  • 如果該文件夾存在,則返回的列表
  • 如果該文件夾不存在,然後創建它。

理想情況下,我想在check-if exists-remove-item(subdir)方面改進它。檢查 - 如果不存在 - 創建

這是爲了便於特定軟件的歸檔過程的自動化。我現在有些作品,但我無法弄清楚如何讓它做到我想要的。

下面是代碼:

$X = @("Server1", "Server2", "Server3") 
$ChkFile = "f:\archive\$server\AABackup" 
$myFolder = "f:\archive\$server" 
$DirExists = Test-Path $ChkFile 
Foreach ($server in $x){ 
    IF ($DirExists -eq $True) { 
    Remove-Item $ChkFile -recurse 
    import-Module "AppAssurePowerShellModule" 
    start-archive -protectedserver $server -startdate "18/03/2013 5:30 PM" -path "f:\archive\$server" 
    } 
Elseif ($DirExists -ne $True) { 
    New-Item -path $myFolder -itemType "directory" 
    import-Module "AppAssurePowerShellModule" 
    start-archive -protectedserver $server -startdate "18/03/2013 5:30 PM" -path "f:\archive\$server" 
    } 
} 

是的,我知道這是粗糙的...這是我第一次嘗試,雖然,所以我可以肯定從這裏更有經驗的腳本編寫受益。

在此先感謝。

+0

在foreach循環中移動'$ ChkFile'和'$ myFolder'行,變量'$ server'在設置變量時擴展爲當前值,所以它們是'$ s'的值erver'在創作時。通過將它們移到foreach中,它們對於每個服務器都是不同的(就像你想要的那樣)。另外,將'Import-Module'行移到腳本的開頭。當它被導入時,它被導入,你不需要或者需要在你的循環中每次都這樣做 – 2013-03-20 19:02:39

回答

0

給這個鏡頭。

$specificPath = Z:\MYDir\MySubDir 

if(!(Test-Path $SpecificPath)) 
{ 
    Mkdir $SpecificPath 
} 
Else 
{ 
    Get-ChildItem $specificPath 
} 

說明: 此檢查使用測試的路徑,這將返回一個布爾值包含在$SpecificPath路徑的存在。 由於我在我的IF語句中使用了(!())語法,因此它會嘗試將語句評估爲false,如果路徑不存在,它將運行第一個代碼塊。 MkDirNew-ItemProperty的別名,如果您只傳遞一個路徑至Mkdir,它將創建一個目錄,類似於Windows MkDir命令。 如果包含在IF語句中的語句未計算爲false,則ELSE塊將運行,並在$specificpath變量上執行get-childitem

1

你設置$ChkFile$myFolder$DirExists循環,這意味着$server沒有一個值着呢,前 - 因爲變量立即評估 - 這些變量將包含垃圾。

您需要在foreach循環內移動這三個語句。

您也不需要比較-eq $true;這會更簡單:

if ($dirExists) { 
    # ... 
} 
else { 
    # ... 
} 

哦,你只需要導入模塊一次 - 在腳本的頂部。

另外,就風格而言:PowerShell的關鍵字一般應該是小寫:foreachif,elseif;在調用cmdlet時要保持一致(你有一個lower-caseUpper-Caselower-Case的混合)注意這些並沒有什麼真正的區別,但是使用一致的風格使代碼更易於閱讀,以便其他人能夠使用它。那些關於我在TechNet,PoshCode上看到的規則 - 順便說一句 - 他們絕對是主觀的。

而且,我個人使用$lowerCase作爲局部變量,而$UpperCase作爲參數自動生成的幫助文本看起來更好)

+0

感謝您的洞察!我已經大大簡化了腳本...結果是對每個服務器採取了所需的操作。 – user2191965 2013-03-20 20:42:11