Enter-PSSession для настраиваемой конечной точки: командлет не распознан

Я пытаюсь настроить Endpoint-Server в своей компании и не могу подключиться к нему. Для тестирования я помещаю модуль RcLogUtil в глобальный путь к модулю
C: \ windows \ system32 \ WindowsPowershell \ v1.0 \ Modules \ 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. Первая ошибка: термин «Split-Path» не распознается как имя командлета, функции, файла сценария или работающей программы. Проверьте написание имени или, если был включен путь, убедитесь, что путь правильный, и повторите попытку. В строке: 1 символ: 1 + Enter-PSSession -ComputerName mka-ps-endpoint -ConfigurationName loggerep + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OpenError: (:) [Enter-PSSession], RunspaceOpenModuleLoadException + FullyQualifiedErrorId: ErrorLoadingModulesOnRunspaceOpen

Огромный вопрос теперь ... почему сеанс не может найти Split-Path? Или как мне сказать конечной точке загрузить этот конкретный командлет? Я успешно попробовал то же самое с SessionType = ’Default’, и это сработало, но со всем беспорядком Powershell вокруг него.


Я буду очень признателен за любую помощь, которую я могу получить, так как я застрял в этом уже довольно долгое время .. Спасибо!


person Michael Kargl    schedule 06.09.2013    source источник


Ответы (1)


Существует возможность заранее отключить каждый командлет, используя -SessionType Default с параметром -ScriptsToProcess 'C: \ Scripts \ LoggerEpStartup.ps1' при создании 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: \ 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'
    }
}

Но я хочу избежать этого подхода, поскольку он кажется скорее неуклюжим обходным решением, чем правильным решением.

person Michael Kargl    schedule 06.09.2013