2

我正在尝试在我的公司中设置端点服务器并且正在努力连接到它。为了进行测试,我将 RcLogUtil 模块放在导出函数的全局模块路径
C:\windows\system32\WindowsPowershell\v1.0\Modules\RcLogUtil\

'Out-LogToEventLog','New-LogMessage'

该计划是让一组特定的用户只访问那些记录功能。

我创建一个会话配置:

New-PSSessionConfigurationFile -Path C:\Scripts\LoggerEp.pssc `
            -SessionType RestrictedRemoteServer `
            -LanguageMode FullLanguage `
            -ExecutionPolicy Unrestricted `
            -ModulesToImport 'RcLogUtil' `
            -VisibleFunctions 'Out-LogToEventLog' `
            -VisibleCmdlets 'Split-Path'

注册它:

Register-PSSessionConfiguration -Path C:\Scripts\LoggerEp.pssc `
                            -Name loggerep `
                            -ShowSecurityDescriptorUI 

并在我的本地机器上输入:

[W0216]> Enter-PSSession -ComputerName mka-ps-endpoint -ConfigurationName loggerep

Enter-PSSession:处理用于创建此运行空间的 InitialSessionState 对象中指定的模块“RcLogUtil”时发生一个或多个错误。有关错误的完整列表,请参阅 ErrorRecords 属性。第一个错误是:“Split-Path”一词未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 line:1 char:1 + Enter-PSSession -ComputerName mka-ps-endpoint -ConfigurationName loggerep + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Enter-PSSession],RunspaceOpenModuleLoadException + FullyQualifiedErrorId:ErrorLoadingModulesOnRunspaceOpen

现在最大的问题是.. 为什么 Session 无法找到 Split-Path?或者我如何告诉端点加载那个特定的 cmdlet?我用 SessionType='Default' 成功地尝试了同样的方法,它可以工作,但是周围有所有的 powershell 混乱。


我真的很感激我能得到的任何帮助,因为我已经坚持了很长一段时间了。谢谢!

4

1 回答 1

0

在创建 SessionConfiguration 时,可以选择通过使用-SessionType Default-ScriptsToProcess 'C:\Scripts\LoggerEpStartup.ps1'参数来提前禁用每个 cmdlet 。

New-PSSessionConfigurationFile -Path C:\Scripts\LoggerEp.pssc `
                -SessionType Default `
                -LanguageMode FullLanguage `
                -ExecutionPolicy Unrestricted `
                -ModulesToImport 'RcLogUtil' `
                -VisibleFunctions 'Out-LogToEventLog' `
                -ScriptsToProcess 'C:\Scripts\LoggerEpStartup.ps1'

C:\Scripts\LoggerEpStartup.ps1:

# Commands needed by PSSession (Also the commands used when 
# creating a RestrictedRemoteServer )
$CmdsToExclude = @(
    'Get-Command'   , 'Out-Default'   ,
    'Exit-PSSession', 'Measure-Object',
    'Select-Object' , 'Get-FormatData'
)

# Hide any other commandlets except the ones needed 
# to create a remote session
Get-Command | Where Visibility -eq 'Public' | ForEach-Object {
    if ( $_.Name -notin $CmdsToExclude ) {
        $_.Visibility = 'Private'
    }
}

但我想避免这种方法,因为它似乎是一种笨拙的解决方法,而不是一个适当的解决方案。

于 2013-09-06T14:21:29.203 回答