将参数传递给Powershell

mtt*_*990 4 parameters powershell scripting arguments powershell-5.0

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

我面临的问题是让PowerShell将参数读入变量.

我将提供一个概念验证示例.

这是一个将参数传递给powershell的示例命令.

C:\Users\UserName\Desktop\Test.ps1 -ADusername "Hello World"
Run Code Online (Sandbox Code Playgroud)

以下是示例脚本:

Param([string]$adusername)
$adusername
pause
Run Code Online (Sandbox Code Playgroud)

我期待以下输出:

Hello World
Press Enter to continue...:
Run Code Online (Sandbox Code Playgroud)

这是实际输出:

Press Enter to continue...:
Run Code Online (Sandbox Code Playgroud)

围绕这个核心概念围绕我的头脑将对我有很大的帮助.我无法找到适用于我的场景时有用的任何示例或教程.我很抱歉,如果这是一个重复的帖子,也无法在这个网站上找到任何东西.

编辑:每个请求,这是我的完整脚本:http://pastebin.com/ktjpLQek

Aus*_*nch 8

如果你避免尝试使用params并以这种方式调用脚本,我想你会有更好的运气.

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

. .\scriptFile.ps1
function "Hello World"
Run Code Online (Sandbox Code Playgroud)

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

如果你调用你的脚本文件:(我使用了runbox)

powershell c:\Path\Folder\Script.ps1 "Hello World!"
Run Code Online (Sandbox Code Playgroud)

然后替换你Param([string]$adusername):

$adUserName = $args[0]
write-host $adUserName
Run Code Online (Sandbox Code Playgroud)

此外,这应该适合你(解剖):

Param([string]$ad)

Write-Host $args[0]
Write-Host $ad

Read-Host
pause
Run Code Online (Sandbox Code Playgroud)

使用路径powershell调用脚本 c:\Path\Folder\Script.ps1 "Hello World!" $ad = "JSmith"

如果这不起作用,则应确保正确设置执行策略.Get-ExecutionPolicy将告诉您当前的级别.对于测试,您可以将其设置得非常低Set-ExecutionPolicy unrestricted