asp.net から PowerShell スクリプトを実行しようとしましたが、すでに数日間成功していません。
C# は次のとおりです。
using (var process = new Process())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"powershell.exe";
startInfo.Arguments = "arguments that call the script here";
startInfo.RedirectStandardOutput = false;
startInfo.RedirectStandardError = false;
startInfo.UseShellExecute = true;
startInfo.CreateNoWindow = true;
process.StartInfo = startInfo;
process.Start();
}
それが呼び出す PowerShell スクリプトには、ff が含まれています。
robocopy "\\network-server\location" "C:\localfolder" "testmovefile.txt"
明らかに、ここでの問題は適切な資格情報です。しかし、C# からであろうとスクリプト レベルであろうと、あらゆる種類の偽装を試みました。PowerShellスクリプトでこれを試しました:
$username = "domain\user"
$password = ConvertTo-SecureString –String "password" –AsPlainText -Force
$pp = new-object -typename System.Management.Automation.PSCredential -argumentlist $username,$password
start-process powershell -argument "C:\localfolder\CopyFile.ps1" -Credential $pp
ネットワークへのアクセス許可を持たないアカウントを使用している場合でも、PowerShell コンソールでローカルでスクリプトを実行すると機能しますが、Web アプリから呼び出された場合は..何も起こりません。
ただし、アプリ プール ID はデフォルトのアプリ プール ID に設定されているだけです。ID を適切な権限を持つカスタム アカウントに変更すると、機能することがわかりました。
私はまだ別の解決策を探しています..スクリプト内の何かを変更するだけで実行できるシナリオが必要です。アプリ プール ID を変更しない限り、どれでも構いません。
私もこれらを試しました:
- http://huddledmasses.org/using-alternate-credentials-with-the-filesystem-in-powershell/
- プロセスの代わりに C# で実行空間を使用し、なりすましを使用する
しかし、それでもうまくいきません。アクセスが拒否され続けます。質問は、PowerShell 内で誰かになりすまして動作させることは可能ですか?