我是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(...)
,会话导入将起作用。我希望这足以让你理解它!
答案 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)