0

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 を変更しない限り、どれでも構いません。

私もこれらを試しました:

しかし、それでもうまくいきません。アクセスが拒否され続けます。質問は、PowerShell 内で誰かになりすまして動作させることは可能ですか?

4

1 に答える 1

0

アプリ プール ID は、ローカル ファイル システムへのアクセスが非常に制限されています (ローカル コンピューターの外部ではアクセスできません)。ID に必要なアクセス権を付与するには、ファイル システムの ACL を変更する必要があります。

Server 2008 (または Vista) ではicacls.exe、権限 GUI がアプリ プール ID をサポートしていないため、コマンド ライン (例: ) を使用してこれを行う必要があります。それ以降のバージョンでは、これは GUI で実行できます。

Process Monitorは、アクセスがブロックされている場所を特定するための優れたツールです。

ただし、ネットワーク リソースにアクセスする必要がある場合、これは機能しません。アプリ プール ID は純粋にローカルであり、ネットワーク上では意味がありません。適切なアクセス権を持つドメイン アカウント (または同じ名前とパスワードを持つ複数のローカル アカウント) を使用する必要があります。

于 2012-07-17T08:04:04.593 に答える