2017-08-03 125 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''。 –

相關問題