从批处理脚本调用powershell show-command

时间:2017-06-08 15:55:38

标签: powershell

我试图通过执行批处理文件为不熟悉Powershell的帮助台人员提供运行一次性Powershell功能的能力。在批处理文件中,我使用bypass executionpolicy启动powershell,导入并运行该函数。另外,我想使用Show-Command为它们提供一个图形用户界面,使参数更加明显。这运行,但显然任何代码都使用&运算符在其自己的子范围内运行。这意味着当带有参数的命令返回到“父”Powershell窗口时,它将失去在子范围内导入的函数的知识。这是我在批处理文件中的内容:

powershell.exe -noprofile -noexit -executionpolicy bypass -command "& {. \\server\share\New-DriveRemapScript.ps1;Show-Command New-DriveRemapScript}"

启动的Powershell窗口仍然存在,但是当我按下Show-Command返回的命令文本时,我得到“New-DriveRemapScript:无法识别”New-DriveRemapScript“一词......”

2 个答案:

答案 0 :(得分:0)

尝试使用-File - 如果您想要启动单个PowerShell脚本,这是最好的。

powershell.exe -File "\\server\share\New-DriveRemapScript.ps1" -ExecutionPolicy Bypass

然后在New-DriveRemapScript.ps1中可能只包含:

Function New-DriveRemapScript {
...
}

最后加入

Show-Command New-DriveRemapScript

这将确保加载命令,然后在调用文件时执行。

答案 1 :(得分:0)

我想在没有"运行"我的脚本文件中的函数。这样,功能文件可以与精明的Powershell用户共享,他们也知道如何在他们的个人资料中点源。我没有完美的解决方案,但我的解决方法是将函数定义为Global(Global:New-DriveRemapScript),以便在子范围退出后它仍然可用。然后上面的批处理文件代码按预期工作。