2016-08-30 6 views
0

あなたの専門家の助けが必要です(私自身の笑いを試して3日後)。スクリプトの失敗部分:Powershell Quotes asisstanceを使用

$yy=(get-date).Year 

Invoke-Command -ComputerName *ipaddress* -Credential $moveitcred { 
move-item -path "C:\iCApps\Dev\LetterGenerator\Letters\FTS\EDMS\*.txt" -destination "C:\Moveitft\Dev\Letters\Outbound" -force 
Start-Process -FilePath "C:\Program Files\7-Zip\7z.exe" -ArgumentList "a -y C:\Moveitft\Dev\Letters\archive\Letters$yy_.zip C:\Moveitft\Dev\Letters\Outbound\*.*" 
} 

動きがうまくいきます。そして、引数リストに年varible($ yy)を含める場合を除いて、zipは正常に動作します。 Powershellはファイル名を調整するために変数を設定したくありません。 $ nullを引用して爆発するか、$ yyがあるはずの空白で作業が完了します。

プロンプトからちょうど$ yyを実行すると、正しい年の値が返されるため、不適切な引用符を使用していると思います。しかし、3日間のグーグルリングの後、さまざまな組み合わせを自分で試してみたら、タオルを投げています。すべてのヘルプ/ガイダンスはとてもいただければ幸いです:)

答えて

0

ありがとうございました!私はこれがpowershell版に沸騰するかもしれないと思う。私はpowershell v2.0を実行しているサーバで、別の2012サーバに対してこれを実行しようとしています。私が問題になっているだけの行にコードを下に短縮しました

(私は「F8」ことができ、それは結果をテストするために)ここでは、次のとおりです。 Invoke-Commandコマンド-ComputerName ipaddressに -Credential $ moveitcred { スタートC:\ Program Files \ 7-Zip \ 7z.exe "-argumentlist" -y C:¥Moveitft¥Dev¥¥Letters¥archive¥Letters $ {yy} .zip C:\ Moveitft \ Dev \手紙\アウトバウンド*。 "" " "

あなたの提案はどちらも、 "コマンド"が処理するという点では "仕事"ですが、依然として変数を正しく読み取っていません。ここで私は私が/私自身の生産マシン上でPowerShellのV4.0に同じコマンドを貼り付けコピーした場合、私はそのPowerShellを考えている理由は、次のことができ、becuaseさ

enter image description here

.zipの結果として何を得るのです即座に "$ yy"が赤色に変わったために変数と見なされ、コードが自分のPS4.0マシンから正常に機能することを色分けして確認します。

これを実行しようとしているPSv2.0サーバーでは、 "-argumentlist"と同じ行が$ yy部分を含めてすべて茶色/茶色で表示されます。それは私のために働くかどうかのヒントのようなものです。

+0

対象のサーバーと呼び出し元の年とが異なると想定する理由はありますか?スクリプトブロックの中でStart-Process行の前に$ yyを宣言して、それが必要なものかどうかを確認してください。それ以外の場合は、Invoke-Commandと一緒に-ArgumentListを使用する必要があります。 – notjustme

+0

正解! mjsrシニアもありがとう、実際にはそれについて昨日考えています。そしてあなたにも今朝それを確認しました:)これは解決しました - スクリプトブロックで宣言してください! –

1

問題は可変引用符についての引用ではありません。あなたが実行しているスクリプトブロックの中で、powershellは$yy varについて何も知らない。だからあなたは値をどこに得るかを教えなければなりません。 argumentListパラメータを使用してそれを行うことができます。私はあなたがすでにそれをやっているのを見ているが、あなたはそれを間違っている(move-itemはそのパラメータをサポートしていない)。

# this is fine and simple 
$yy="Hello scriptblocks!" 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $yy" } -ArgumentList $yy 

# this is incorrect 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $yyCarefulWithThisText" } -ArgumentList $yy 

# this shows how you could resolve the variable when you want to put text around 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $($yy)CarefulWithThisText" } -ArgumentList $yy 

# output1: whatever you want to run that use the an external var. Hello scriptblocks! 
# output2: whatever you want to run that use the an external var. 
# output3: whatever you want to run that use the an external var. Hello scriptblocks!CarefulWithThisText