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

相关问题