我有初学者在编写脚本和编程方面的知识,并且有一组PowerShell命令,我在解决如何将其转换为脚本时遇到问题。
我可以通过运行Exchange 2007 PowerShell控制台作为我的域管理员帐户,然后运行以下命令将命令传递到Exchange 2013混合服务器以与Office 365一起使用,从Windows 7计算机成功运行以下远程命令:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://hybridexch2013.contoso.com/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
Enable-RemoteMailbox jame.doe@contoso.com -RemoteRoutingAddress jane.doe@contosoinc.mail.onmicrosoft.com
我越是关注这一点,我就不知道自己在取得进步。请参阅下文,了解我的逻辑如何在我的脑海中起作用。我知道这是不正确和不完整的。我已经评论过我之前的一个功能,但是我不确定我是在做它是否正确或是否需要它。
param($enableMailbox)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://hybridexch2013.contoso.com/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -AllowClobber
$fname = Read-Host "What is the user's first name?"
$lname = Read-Host "What is the user's last name?"
#function Func($enableMailbox)
#{
$enableMailbox = "Enable-RemoteMailbox $fname.$lname@contoso.com -RemoteRoutingAddress $fname.$lname@contosoinc.mail.onmicrosoft.com"
#}
#Func $enableMailbox
Write-Host $enableMailbox
我还发现如果我手动运行:
Enable-RemoteMailbox $fname.$lname@contoso.com -RemoteRoutingAddress $fname.$lname@contosoinc.mail.onmicrosoft.com
我一无所获。所以我甚至不了解如何将变量传递给字符串以正确运行命令。即使我跑:
$fname = "Jane"
$lname = "Doe"
$enableMailbox = "Enable-RemoteMailbox $fname.$lname@contoso.com -RemoteRoutingAddress $fname.$lname@contosoinc.mail.onmicrosoft.com"
Write-Host $enableMailbox
我没有结果。
我试图通过这些页面的帮助来理解param函数:Powershell script with params *and* functions
Passing a variable to a powershell script via command line
https://devcentral.f5.com/blogs/us/powershell-abcs-p-is-for-parameters
http://www.experts-exchange.com/Programming/Languages/Scripting/Powershell/Q_27900846.html
但我发现参数功能难以理解,不确定我是否在这里朝着正确的方向前进。到目前为止,唯一可行的方法是远程连接到PowerShell。
如果我在这方面受到帮助并且缺乏我的能力,请帮忙。
答案 0 :(得分:0)
Param函数简而言之......
Pipelines
结果是:你好
使用Param Section将参数添加到函数中,如上例所示,
所以对于你的剧本:
Function Write-Something
{
Param($InputText)
Write-Host $InputText
}
Write-Something Hello
答案 1 :(得分:0)
我认为你对Write-Host
感到困惑。
我不确定您是否尝试将enable-remotemailbox写入控制台或执行它。您拥有的代码应该可以正常写入控制台(屏幕),但不会执行命令。执行命令:
Enable-RemoteMailbox "$fname.$lname@contoso.com" -RemoteRoutingAddress "$fname.$lname@contosoinc.mail.onmicrosoft.com"
双引号内的任何内容都会扩展。例如:如果$ fname等于“Bob”,“$ fname”将扩展为“Bob”。如果将整个命令封装在变量的引号中,则Write-Host将不执行该命令。 Write-Host旨在将输出写入屏幕,因此您只需在控制台中看到该命令。
如果要进一步展开,可以使用子字符串运算符$()。例如:
Write-Host "$($fname.length).$($lname.length)"
“Bob”和“Smith”的回复为“3.5”。
为避免扩展,请使用单引号:
Write-Host '$($fname.length).$($lname.length)'
将“$($ fname.length)。$($ lname.length)”写入控制台。
以下(类似于您的代码)没有引号:Write-Host $fname.$lname@contoso.com
将尝试拉出$ fname的$ lname@contoso.com属性,在此上下文中没有意义(不存在)。详细说明,它等同于Write-Host $fname.($lname@contoso.com)
。