2016-12-21 7 views
1

PowerShellのMicrosoftのマニュアルがあれば、次のコードが特定のエラーで失敗する理由はありません。 PowerShellは、スクリプトが長くなり過ぎると失敗する可能性があります。すべてのパスは二重引用符で囲まれた文字列です。PowerShellの新しい項目位置パラメータの不一致

##### ALGORITHM Take in keystore path, make a backup in an adjacent directory 
$ksPath = $java_store_path.Substring(0, $java_store_path.LastIndexOf('\') + 1) 
$backupPath = $ksPath + "backups" 
New-Item $backupPath PowerShell -type directory -force 

新アイテム:位置パラメータは、引数「のPowerShell」を受け入れることを見つけることができません。

https://technet.microsoft.com/en-us/library/ee176914.aspx

New-Item c:\scripts\Windows PowerShell -type directory 

それが有効なら、鉱山はあまりにもする必要があります。私はServer 2012 R2を実行しています。

答えて

5

このページの例は単なる間違っています。彼らはパスC:\Scripts\WindowsPowerShellを参照することを意味したか、またはスペースを含むディレクトリを引用するのを忘れてしまったようです。

だから、これらの一つとなっている必要があります。

New-Item c:\scripts\WindowsPowerShell -type directory 
New-Item 'c:\scripts\Windows PowerShell' -type directory 
New-Item "c:\scripts\Windows PowerShell" -type directory 

は自問し、何PowerShellだけに言及しているのでしょうか?どのパラメータに対応していますか?


編集:コメンターが指摘したように、実施例は、別個-Path-Nameが指定され、そしてその称するところPowerShell-Nameパラメータの値になっていたnameSetパラメータを表示するようになっていました。それは正しいように見えます。この例がうまくいかなかった理由は、-Nameパラメータを位置指定することができないためです。これについては、MSDNの記事「リンク先」と組み込みヘルプにあります:

その場合
Type: String 
Parameter Sets: nameSet 
Aliases: 

Required: True 
Position: Named 
Default value: None 
Accept pipeline input: True (ByPropertyName) 
Accept wildcard characters: False 

、その例としては、これらのようなものされている必要があります:

New-Item c:\scripts\Windows -Name PowerShell -type directory 
New-Item -Path c:\scripts\Windows -Name PowerShell -type directory 

だから反復する、名前付きパラメータは、ここで働いているだろう、と混乱を避けているだろう。一般


彼らは非常に明確だ(とその後も、私は避けることをお勧めしたい)場合を除き、あなたは、スクリプト内の位置パラメータを使用すべきではありません。

名前付きパラメータを使用すると、このことがわかりやすくなりました。また、タブの補完は、パラメータ名の入力やパスの補完(通常は適切な引用符付き)に役立ちます。

私はあなたがあなたのものに変更すべきだと思う:

New-Item -Path $backupPath -Type Directory -Force 

そして、そのTechNetの記事を見ている、それは本当に良いではありません。 MSDN article on New-Itemのほうが優れています。これはGet-Help New-Itemを実行したときに表示される情報です。


サイド質問:

その後、再びスクリプトがあまりにも長くなったときに、PowerShellが失敗する可能性があります。

何ですか?

+0

私は冗談ではありません。我々は、サーバのセットアップ、設定、メンテナンスタスクスケジューリングを行う5000行のPSモノリスを持っています。それは大きすぎるので壊れた。パラメータは、透過的な理由がなくなるように、機能をお互いの位置に置くだけです。LLVMの静的解析ツールを使用して、データフローを書かれたとおりに検証しました。 5400行の後、それはそれだけで崩れます。私たちは複数のスクリプトレットに分割しています。 – patrickjp93

+0

合意。この例では、 'C:\ Scripts'フォルダ内に' Windows PowerShell'という名前の新しいフォルダを作成すると明記しています。 – andyb

+0

@andybさらなる見方私はあなたに同意し、(今削除された)他のコメントがありますが、位置パラメータが混乱する可能性があるという点をさらに強調していると思います。私は明確に編集しました。ありがとう! – briantist

関連する問題