带有变量的远程 Exchange Powershell 会话

Remote Exchange Powershell session with variables

我在脚本和编程方面具有初学者知识,并且有一组 PowerShell 命令,但我在弄清楚如何将其转换为脚本时遇到问题。

我可以通过 运行将 Exchange 2007 PowerShell 控制台作为我的域管理员帐户,然后 运行 从我的 Windows 7 机器成功 运行 以下远程命令宁以下命令将命令传递到 Exchange 2013 混合服务器以与 Office 365 一起使用:

$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

但我发现 param 函数很难理解,甚至不确定我是否在朝着正确的方向前进。到目前为止,似乎唯一可行的是远程连接到 PowerShell。

如果我在这方面需要帮助,但我在这里缺乏能力,请提供帮助。

Param 函数简称...

 Function Write-Something
    {
        Param($InputText)
        Write-Host $InputText
    }

Write-Something Hello

结果是:你好

如上例所示,使用参数部分将参数添加到您的函数中,

所以对于你的脚本:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://hybridexch2013.contoso.com/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -AllowClobber

Function Enable-MBX
{
Param($Fname,$Lname)

 Enable-RemoteMailbox "$Fname $Lname" -RemoteRoutingAddress "$fname.$lname@contoso.mail.onmicrosoft.com"  
}

Enable-MBX Jane Doe

我认为您只是对 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).