Import-PSSession在脚本中失败,在shell中运行

时间:2016-12-02 21:06:22

标签: powershell powershell-v2.0 windows-server-2008-r2 exchange-server-2010

我是Powershell脚本的新手,我正在开发一个用户管理Powershell脚本,但我遇到了一个奇怪的错误。

以下代码在我从shell运行时起作用,但在从脚本运行时不起作用:

$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session

当我在第一行中带有Param()块的脚本中运行它时,它失败并出现以下错误:

Import-PSSession: Cannot bind argument to parameter 'Path' becuase it is an empty string.

如果删除Import-PSSession块,我可以让Param()工作,但我不知道如何为我的脚本接受命令行参数。如何保留Param()块(或更一般地,接受命令行参数)并仍能导入PS会话?

我在试图连接到2010 Exchange服务器的Windows 2008 R2服务器上使用Powershell v2。

更新

我有一个名为ManageUser.ps1的脚本,我从Powershell提示符(如

)运行
.\ManageUser.ps1 -disableUser -username someuser

脚本的开头如下:

Param(
    [switch]$disableUser,
    [string]$username
)
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session
#more stuff past here...

Import-PSSession命令失败。但是,如果我删除整个Param(...),会话导入将起作用。我希望这足以让你理解它!

1 个答案:

答案 0 :(得分:2)

您的脚本可以自行运行,也可以在其他脚本中调用:

& 'C:\Scripts\ManageUser.ps1' -disableUser -username "foo"
Get-Mailbox -resultsize 5 | ConvertTo-Csv -NoTypeInformation | Out-File C:\Scripts\mytest.csv

由于@SamuelWarren没有提到-allowclobber,后续运行会收到导入错误/警告......

在你的情况下(至少在最初写这个问题很久以前),错误是由于你在这里没有提到的另一个变量。您可能在第一次运行后修复了该问题,然后后续测试显示了AllowClobber错误。

另外值得注意的是(对于将来会遇到这种情况的人)检查您正在调用的文件的路径。仅仅因为您尝试使用相对路径.\myfile.ps1并不意味着PowerShell当前正在查找正确的目录。

检查:$psscriptroot

Split-Path -Path $($global:MyInvocation.MyCommand.Path)