输入-PSSession到自定义端点:无法识别Cmdlet

时间:2013-09-06 11:31:16

标签: powershell scripting powershell-remoting endpoints

我正在尝试在我公司设置一个Endpoint-Server,并且正在努力连接它。为了测试,我在全局模块路径中放置了一个RcLogUtil模块 C:\ Windows \ System32下\ WindowsPowershell \ V1.0 \模块\ RcLogUtil \
导出功能

'Out-LogToEventLog','New-LogMessage'

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

我创建了SessionConfiguration:

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:处理模块时发生了一个或多个错误   'RcLogUtil'在用于创建的InitialSessionState对象中指定   这个运行空间。有关完整列表,请参阅ErrorRecords属性   错误。第一个错误是:无法识别术语“拆分路径”   作为cmdlet,函数,脚本文件或可运行程序的名称。   检查名称的拼写,或者如果包含路径,请验证   路径是正确的,然后再试一次。在行:1个字符:1   + Enter-PSSession -ComputerName mka-ps-endpoint -ConfigurationName loggerep   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:OpenError:(:) [Enter-PSSession],RunspaceOpenModuleLoadException       + FullyQualifiedErrorId:ErrorLoadingModulesOnRunspaceOpen

现在的一个大问题是..为什么Session无法找到Split-Path?或者我如何告诉端点加载该特定cmdlet? 我成功地使用SessionType ='Default'尝试了相同的功能,但它的工作原理却与所有的PowerShell混杂在一起。


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

1 个答案:

答案 0 :(得分:0)

在创建时,可以使用 -SessionType默认 -ScriptsToProcess'C:\ Scripts \ LoggerEpStartup.ps1'参数预先禁用每个cmdlet。 SessionConfiguration。

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

C:\脚本\ 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'
    }
}

但是我想避免这种情况,因为它似乎更像是一种笨拙的解决方法,而不是一种正确的解决方案。