1. ホーム
  2. powershell

[解決済み] スクリプトへのパスが完全修飾されている場合、削除サーバーでのPowershellの実行に失敗する

2022-02-15 21:02:44

質問

同じドメインにWindows Server 2012 R2が動作するサーバーが2台あり、 \tt-sql.perf.corp と \tt-file.perf.corp です。ファイルサーバーの共有フォルダーに、Powershellスクリプトの \tt-file.perf.corp があります。SQLサーバー上のアプリケーションで次のコマンドを実行しています。

powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file.perf.corp\fileshare\helloworld.ps1'"

以下のエラーで失敗しています。

& : AuthorizationManager のチェックに失敗しました。行番号:1 文字数:3 + & '\tt-file.perf.corpfileshare

また、IPアドレスを使用するようにパスを変更すると失敗します。

ただし、スクリプトへのパスが完全修飾されていない場合は動作します。 powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file\fileshare\helloworld.ps1'"

Windows Management Instrumentation サービスは、両方のサーバーで実行されています。両方のサーバーで Get-ExecutionPolicy も実行しましたが、両方とも Unrestricted に設定されています。UACは両方のサーバーで無効になっています。どうなっているのでしょうか?

解決方法は?

すでに回避策(FQDNではなくShort Nameを使用)を見つけているようなので、代わりに、そもそもなぜこの問題にぶつかっているのかについてお答えします。

より詳細な情報は以下の通りです。 このブログの記事 これは、サーバーにFQDNを指定すると、PowerShellとWindowsのセキュリティ機能の1つに抵触してしまうため、効果的に発生しています。 PowerShell が通常の実行ポリシーをバイパスするように指定しているにもかかわらず、FQDN から実行すると、Windows はこのファイルが Web から来たものだと思い込んでしまい、PowerShell はこのような警告を表示したがるのです。

Run only scripts that you trust. While scripts from the Internet can be
useful, this script can potentially harm your computer. Do you want to run  
\\tt-file.perf.corp\fileshare\helloworld.ps1?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D"):

しかし、シェルを非インタラクティブモードで実行しているため、それはできません。


つまり、この問題を解決するには、2つの選択肢があるということです。

  1. このブログの記事にあるように、UNCパスをIEで信頼できるサイトにするか、代わりにご覧のようにShort Nameだけを使う( \tt-file.perf.corp とする)ことで問題を解決することができます。
  2. ローカルイントラネットゾーンにグループポリシーを使用する(または1回限りのコンピュータであればIE内で設定する)アドレスが考えられます。 1台限りのマシンであれば、Internet Explorerの「ツール」→「インターネットオプション」→「セキュリティ」タブを選択します。 ローカルイントラネット]-[詳細設定]をクリックし、以下のようにFQDNをここに追加します。

グローバルに設定したい場合は、上記と同様にGroup Policy Management Consoleの以下の場所にパスを指定します。

<ブロッククオート

ユーザーの設定] をクリックし、[ポリシー] を展開します。 エクスプローラーのメンテナンス >セキュリティ 3. セキュリティゾーンとコンテンツ評価」をダブルクリックし、「現在のセキュリティゾーンとプライバシー設定をインポートする」を選択します。

グループポリシーアプローチの詳細については、こちらをご覧ください。 TechNetのこのスレッドを参照してください。

お役に立てれば幸いです。 残念ながら、私はこの問題を解決するための良いPowerShellの方法を思いつきません :).