[解決済み] スクリプトへのパスが完全修飾されている場合、削除サーバーでのPowershellの実行に失敗する
質問
同じドメインに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つの選択肢があるということです。
- このブログの記事にあるように、UNCパスをIEで信頼できるサイトにするか、代わりにご覧のようにShort Nameだけを使う( \tt-file.perf.corp とする)ことで問題を解決することができます。
- ローカルイントラネットゾーンにグループポリシーを使用する(または1回限りのコンピュータであればIE内で設定する)アドレスが考えられます。 1台限りのマシンであれば、Internet Explorerの「ツール」→「インターネットオプション」→「セキュリティ」タブを選択します。 ローカルイントラネット]-[詳細設定]をクリックし、以下のようにFQDNをここに追加します。
グローバルに設定したい場合は、上記と同様にGroup Policy Management Consoleの以下の場所にパスを指定します。
<ブロッククオートユーザーの設定] をクリックし、[ポリシー] を展開します。 エクスプローラーのメンテナンス >セキュリティ 3. セキュリティゾーンとコンテンツ評価」をダブルクリックし、「現在のセキュリティゾーンとプライバシー設定をインポートする」を選択します。
グループポリシーアプローチの詳細については、こちらをご覧ください。 TechNetのこのスレッドを参照してください。
お役に立てれば幸いです。 残念ながら、私はこの問題を解決するための良いPowerShellの方法を思いつきません :).
関連
-
[解決済み] OutVariableを使用してArrayListを作成する
-
[解決済み] PowerShell起動時に「動的操作はhomogenous appdomainでしか実行できない」エラーが発生する。
-
[解決済み] Get-ADUser でのエラー: 無効な列挙コンテキスト
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] PowerShellでディレクトリを変更する
-
[解決済み] Powershell New-ScheduledTaskTrigger -RepetitionIntervalを使った反復タスクの実行
-
[解決済み] powershellスクリプトで、最後に改行を入れずにWrite-Warningすることはできますか?
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] Powershellでギャラリーが利用できないというエラーが発生しました。
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] powershellでパラメータ'Path'がNULLのため引数を結合できないエラーの取得
-
[解決済み] OutVariableを使用してArrayListを作成する
-
[解決済み] Get-ADUserとフィルタを含むForEach-Objectループ
-
[解決済み] PowerShellでディレクトリを変更する
-
[解決済み] PowerShellでLDAPクエリ
-
[解決済み] PowerShellスクリプトのファイルシステムの場所を取得するにはどうすればよいですか?
-
[解決済み] PowershellでTimeZoneを設定する方法
-
[解決済み] powershellでToStringを使用して日付をフォーマットする
-
[解決済み] Install-Module : 'Install-Module' という用語は、コマンドレット名として認識されません。
-
[解決済み] powershellの&マークはどういう意味ですか?