我有一个powershell脚本,可以完成Active Directory和MS Exchange中的某些任务。我需要从我们的呼叫记录系统传入Active Directory用户名。让Call日志系统传递参数很简单。
我面临的问题是让PowerShell将参数读入变量。
我将提供一个概念验证示例。
这是一个将参数传递给powershell的示例命令。
C:\Users\UserName\Desktop\Test.ps1 -ADusername "Hello World"
以下是示例脚本:
Param([string]$adusername)
$adusername
pause
我期待以下输出:
Hello World
Press Enter to continue...:
这是实际输出:
Press Enter to continue...:
围绕这个核心概念围绕我的脑袋将会非常有帮助。我无法找到适用于我的场景时有用的任何示例或教程。我很抱歉,如果这是一个重复的帖子,也无法在这个网站上找到任何东西。
编辑:根据请求,这是我的完整脚本:http://pastebin.com/ktjpLQek
答案 0 :(得分:8)
如果您避免尝试使用params并以这种方式调用脚本,我认为您会有更好的运气。
这是可能的,但如果您将脚本文件内联如下,则参数可以更好地工作:
. .\scriptFile.ps1
function "Hello World"
接近你正在做的事情,你应该使用$ args 和调用PowerShell(直接使用exe文件)
如果你调用你的脚本文件:(我使用了runbox)
powershell c:\Path\Folder\Script.ps1 "Hello World!"
然后将您的Param([string]$adusername)
替换为:
$adUserName = $args[0]
write-host $adUserName
此外,这应该适合你(解剖):
Param([string]$ad)
Write-Host $args[0]
Write-Host $ad
Read-Host
pause
用路径调用脚本,
powershell c:\Path\Folder\Script.ps1 "Hello World!" $ad = "JSmith"
如果这不起作用,则应确保正确设置执行策略。 Get-ExecutionPolicy将告诉您当前的级别。对于测试,您可以使用Set-ExecutionPolicy unrestricted
答案 1 :(得分:1)
将以下内容添加到脚本的顶部。
Param(
[Parameter(Mandatory=$true)]
[string]$Euser
)
Write-Host "Deactivating $EUser"
cd之后调用示例到脚本目录
.\ScriptName.ps1 -Euser "FOO" # Tab auto completion works
答案 2 :(得分:0)
以下新脚本适用于我。
Param([string]$servers)
"You chose $servers"
PS C:\ scripts> 。\ Untitled1.ps1“这个测试”
您选择了此测试
PS C:\ scripts>