命令在ISE中运行,但不在控制台中作为ps1运行

时间:2015-07-30 08:20:32

标签: powershell

我找到了很多线程并经历过但没有一个真正解决我的问题。我试着保持简短。

New-PSDrive –Name "G" –PSProvider FileSystem –Root "\\dom\dfs\dom-loc-Share" –Persist

如果我从ISE运行它,它的工作原理非常好。 当我将其粘贴到控制台时,它工作正常。 如果我尝试在控制台中运行ps1,它将无效。

  • 我重新启动了ISE
  • 我检查过并且都在单线程公寓中运行
  • Executionpolicy不受限制
  • 我以管理员身份运行

你能帮帮我吗?

2 个答案:

答案 0 :(得分:3)

使用-Scope Global,有关详细信息,请访问此technet文章:

  

about_Scopes https://technet.microsoft.com/en-us/library/hh847849.aspx

     

[...]   Windows PowerShell保护对变量,别名,函数的访问,   和 Windows PowerShell驱动器(PSDrives)限制它们的位置   阅读和更改。通过对范围强制执行一些简单的规则,Windows   PowerShell有助于确保您不会无意中更改   不应更改的项目。 [...]

New-PSDrive –Name "G" –PSProvider FileSystem –Root "\\dom\dfs\dom-loc-Share" –Persist -Scope Global

答案 1 :(得分:1)

您如何检查G驱动器是否已映射?

如果您在脚本中运行以下内容,那么如果已创建驱动器,则会通过Get-PSDrive向您显示:

if(Get-PSDrive | ?{$_.Name -eq "G"}) {
    'Removing G'
    Remove-PSDrive "G"
}


'Adding G'
New-PSDrive –Name "G" –PSProvider FileSystem –Root "\\ukcconas2edc\ax_docs" –Persist


'Does G Exist?'
Get-PSDrive | ?{$_.Name -eq "G"}

如果您只是通过Windows资源管理器进行检查,我认为在那里缓存会发生一些有趣的事情。 运行脚本后,单击Computer,然后在右侧窗格(列出驱动器的位置)上单击鼠标右键并选择Refresh;希望G驱动器现在可以显示。

此外,如果您有一个不同的PowerShell控制台,并且您通过运行push-location g:get-psdrive进行检查,那么您之前创建的用于检查驱动器的会话是否已创建该驱动器已创建,它不会列出它。我认为这是由于powershell中的缓存/可能是故意避免并行运行的脚本互相干扰?