2017-08-03 4 views
0

Powershell ISEを管理者として開いています。デスクトップからスクリプトを実行すると(例:C:\Users\myUser\Desktop\CompareScripts\runCompareScript.ps1)、スクリプトは正常に動作します。しかし、私がC:\CompareScripts\runCompareScript.ps1から実行すると、スクリプトはファイルのパスをC:\Windows\system32\runCompareScript.ps1に変更します。なぜこのようなことが起こっているのですか?PowershellスクリプトがファイルパスをC: Windows system32に変更しています

注:これはinvoke-sqlcmd 文の実行中に起こっています。

enter image description here

+2

あなたのスクリプトの実行方法は不明で、 'C:\ windows ... 'に変更すべきではありません。カレントディレクトリに' $ pwd'を使用して、 '$ env:UserProfile \ Desktop \ CompareScripts \ foo.sql'何がうまくいかないかを見るには、スクリプトをもっと表示する必要があります。 –

答えて

1

あなたがコンテキストを変更すると、現在の作業ディレクトリが変更されます。絶対ファイルパスを使用します。

Invoke-Sqlcmd -InputFile "C:\Users\myUser\Desktop\CompareScripts\---.sql" 
+0

なぜ私はもう少しダイナミックなことをすることができませんか?私は現在、次の '$ rootDir = split-path -parent $ MyInvocation.MyCommand.Definition;'を使って現在の作業ディレクトリを取得しています。上記のスクリーンショットのextractRSPathが正しいのですが、スローされたエラーは正しくないため、ステートメントが機能しています。 –

+0

128行にブレークポイントを置き、実行が一時停止したときに$ extractPathを実行すると、出力は 'C:\ Windows \ system32 \ ---。sql'になります。私はそれがなぜスクリプトを見ていないのか説明できません。情報が利用可能な場合、最善の解決策は絶対パスを使用することです。 – Mike

+0

@PhiL '$ rootDir'はあなたの作業ディレクトリではなくあなたのスクリプトの場所です。 '$ rootDir'と' $ PWD.Path'の出力を比較してください。呼び出されたスクリプトの絶対パスは、 'Join-Path $ rootDir 'something.sql''のように構築することができます。 –

関連する問題