将参数传递给 Powershell

Pass argument into Powershell

我有一个 powershell 脚本可以完成 Active Directory 和 MS Exchange 中的一些任务。我需要从我们的呼叫记录系统中传入 Active Directory 用户名。让通话记录系统传递参数很简单。

我面临的问题是让 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...:

仅仅围绕这个核心概念就会对我有很大帮助。我找不到适用于我的场景的任何示例或教程。如果这是重复的 post,我深表歉意,也无法在此站点上找到任何内容。

编辑:根据要求,这是我的完整脚本:http://pastebin.com/ktjpLQek

新脚本中的以下内容适合我。

Param([string]$servers)
"You chose $servers"

PS C:\scripts> .\Untitled1.ps1 "this test"

你选择了这个测试

PS C:\scripts>

我认为如果您避免尝试使用参数并完全以这种方式调用脚本,您的运气会好得多。

这是可能的,但是如果您像这样内联脚本文件,参数会更好地工作:

. .\scriptFile.ps1
function "Hello World"

然而,为了更接近您正在做的事情,您应该使用 $args 调用 PowerShell(直接执行 exe)

如果你这样调用你的脚本文件:(我使用了运行框)

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

将其设置得非常低

将以下内容添加到脚本的顶部。

Param(
  [Parameter(Mandatory=$true)]
  [string]$Euser
)

Write-Host "Deactivating $EUser"

cd到脚本目录后调用示例[​​=12=]

.\ScriptName.ps1 -Euser "FOO" # Tab auto completion works