将参数传递给Powershell

时间:2016-05-06 22:05:54

标签: powershell parameters scripting arguments powershell-v5.0

我有一个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

3 个答案:

答案 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>