将参数传递给 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
我有一个 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