繁体   English   中英

将参数传递给Powershell

[英]Pass argument into Powershell

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

如果你避免尝试使用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" c:\\Path\\Folder\\Script.ps1 "Hello World!" $ad = "JSmith"

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

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

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

Write-Host "Deactivating $EUser"

cd之后调用示例到脚本目录

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

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

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

PS C:\\ scripts>。\\ Untitled1.ps1“this test”

你选择了这个测试

PS C:\\ scripts>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM