1

ファイルをローカルからネットワーク上の場所にコピーするスクリプトを実行しています。スクリプトは、powershell を介して自分で呼び出すと機能しますが、タスク スケジューラからは機能しません。この記事や他の多くの記事を見てきましたが、うまくいきません。現在、タスク スケジューラの「前回の実行結果」を見ると、停止する前にタスクが現在数分間実行されていると表示されます。タスクを終了しても例外は発生しません (コードは try/catch にあります)

いくつかの異なる例を試していたので、ServerLocation と ServerFullPath を分割しました。

コードは次のとおりです (ドメイン/ユーザー名/パスワードが置き換えられています)。

Set-Variable ServerCredentials -option Constant -value "<domain>/<username>  <password>"
Set-Variable ServerLocation -option Constant -value "\\<domain>"
Set-Variable ServerFullPath -option Constant -value $ServerLocation"\path\path"

$latest = Get-ChildItem -Path .\ | Sort-Object LastWriteTime -Descending | Select-Object -First 1
net use $ServerFullPath /user:$ServerCredentials

Copy-Item .\$latest $ServerFullPath -Force

私はpowershellを初めて使用しますが、トラブルシューティング方法について何か考えはありますか? さらに情報が必要ですか?

4

1 に答える 1

0

これに対する答えは、「ネット使用」がどのように機能するかにあります。cmd に「net use」と入力すると、既に接続が確立されていることが示されました。すでに接続が確立されていると、net use がプロンプトを表示したくなるようです。そのため、スクリプトがハングしているように見えました。元のネット使用のすぐ上にある「Net use * /delete /y」で接続を削除しようとしたところ、スクリプトが正しく続行されました。次に、次のようになりました。

Net use * /delete /y
net use $ServerFullPath /user:$ServerCredentialUser $ServerCredentialPassword

ここで重要なのは末尾の \y で、プロンプトに対して無言で yes と答えます。

余談ですが、このリンクは /delete パラメータの使用方法を示しています。ここで * を使用することにしましたが、その特定の接続を削除できたようです。

しかし、これはおそらくネット使用がすでにそこにあった接続について何らかの方法で私に促していたので、元の行を次のように変更しました:

net use $ServerFullPath /user:$ServerCredentialUser $ServerCredentialPassword /y

最後に /y を付けると、問題なく動作し、すべてがうまくいきます:)

于 2015-05-15T23:10:31.850 に答える