我有一个 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
这似乎是某种范围的问题,只是不知道如何解决它。