我有一个PowerShell脚本/函数,当我在PowerShell配置文件中使用它或在PowerShell窗口中手动复制/粘贴该函数时效果很好。
我正在努力让我的团队的其他成员可以访问该功能作为模块。我希望将模块存储在一个中心位置,以便我们都可以将它添加到我们的PSModulePath。
以下是基本功能的副本:
Function Connect-O365{
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $o365cred -Authentication Basic -AllowRedirection
Import-PSSession $session365 -AllowClobber
}
如果我在PowerShell配置文件中保存此功能,它可以正常工作。我可以使用这个函数来点源* .ps1脚本,它也能正常工作。
问题是我将该函数保存为* .psm1 PowerShell脚本模块。该函数运行正常,但Import-PSSession中没有导出的命令可用。我认为这可能与模块范围有关。
我正在寻找有关如何解决这个问题的建议。
当我创建以下模块并运行Connect-O365时,导入的cmdlet将不可用。
$scriptblock = {
Function Connect-O365 {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection
Import-PSSession $session365 -AllowClobber
}
}
New-Module -Name "Office 365" -ScriptBlock $scriptblock
当我在没有Connect-O365功能的情况下导入下一个模块时,可以使用导入的cmdlet。
$scriptblock = {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection
Import-PSSession $session365 -AllowClobber
}
New-Module -Name "Office 365" -ScriptBlock $scriptblock
这似乎是某种范围问题,只是不确定如何绕过它。
答案 0 :(得分:10)
在TechNet的帮助下,我能够修改脚本模块,使其按预期方式工作。
function Connect-O365 {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession `
-ConfigurationName Microsoft.Exchange `
-ConnectionUri "https://ps.outlook.com/powershell/" `
-Credential $o365cred `
-Authentication Basic `
-AllowRedirection
Import-Module (Import-PSSession $session365 -AllowClobber) -Global
}