与变量

时间:2015-10-14 19:47:35

标签: windows powershell exchange-server office365

我有初学者在编写脚本和编程方面的知识,并且有一组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。

如果我在这方面受到帮助并且缺乏我的能力,请帮忙。

2 个答案:

答案 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)