1

私は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"
    }
}

はい、大まかであることは承知しています... ただし、これは初めての試みなので、経験豊富なスクリプターの助けを借りることは間違いありません。

前もって感謝します。

4

2 に答える 2

1

$ChkFile,をループの 前に設定$myFolderしています。これは、まだ値がないことを意味します。変数はすぐに評価されるため、これらの変数にはゴミが含まれます。$DirExists $server

foreachこれら 3 つのステートメントをループ内に移動する必要があります。

比較する必要もありません-eq $true。これはもっと簡単です:

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

ああ、モジュールをインポートする必要があるのは 1 回だけです。スクリプトの先頭で行ってください。

また、スタイルに関しては、PowerShell キーワードは通常、小文字にする必要があります: foreach, if, elseif; コマンドレットを呼び出すときに一貫性を保つ (と と が混在しているlower-caseUpper-Caseこれらlower-Caseは実際には違いがないことに注意してください。ただし、一貫したスタイルを使用すると、他の誰かがコードを読みやすくなります。私はこれらのルールに基づいています。私が TechNet、PoshCode、およびここで見たものは、間違いなく主観的なものです。

また、個人的には$lowerCase、ローカル変数と$UpperCaseパラメーターに使用します (自動生成されたヘルプ テキストの見栄えが良くなるためです)。

于 2013-03-20T18:16:35.780 に答える
0

これを試してみてください。

$specificPath = Z:\MYDir\MySubDir

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

$SpecificPath説明: これは、Boolean 値を返す using Test-Path に含まれるパスの存在をチェックします。IF ステートメントで構文を使用したため(!())、ステートメントを false に評価しようとします。IF パスが存在しない場合、コードの最初のブロックが実行されます。 MkDirのエイリアスNew-ItemPropertyです。パスだけを渡すMkdirと、Windows の MkDir コマンドと同様にディレクトリが作成されます。IF ステートメントに含まれるステートメントが false と評価されない場合、ELSE ブロックが実行get-childitemされ、$specificpath変数に対して a が実行されます。

于 2013-03-20T18:10:07.933 に答える