Почему мне отказывают в доступе с помощью Invoke-Command на локальном хосте?

У меня есть действительные учетные данные учетной записи службы Windows, хранящиеся в $creds, и я хочу использовать их для доступа к каталогу C:\temp\ на другом сервере под названием remotehost. Я использую Invoke-Command для выполнения одного и того же теста дважды: сначала на localhost (что приводит к отказу в доступе), а затем на remotehost (что приводит к успеху):

Invoke-Command -ComputerName localhost -Credential $creds -ScriptBlock {
    Test-Path -Path \\remotehost\C$\temp\    # access denied
}

Invoke-Command -ComputerName remotehost -Credential $creds -ScriptBlock {
    Test-Path -Path \\remotehost\C$\temp\    # True
}

Кто-нибудь может объяснить это «доступ запрещен»? Почему я могу успешно подключиться к remotehost и выполнить там команду, но не могу выполнить ту же команду напрямую из localhost?

На всякий случай я также проверил, что соединение с localhost работает:

Invoke-Command -ComputerName localhost -Credential $creds -ScriptBlock {
    Test-Path -Path C:\temp    # True
}

Вы должны быть администратором на локальном хосте.

js2010 12.08.2024 18:55

Я в группе «Администраторы», и учетная запись службы тоже. В любом случае, как это объяснит отказ в доступе в одном случае, но не в другом?

dokaspar 12.08.2024 20:31

как щелкнуть правой кнопкой мыши по PowerShell и «запустить от имени администратора»

js2010 12.08.2024 20:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Invoke-Command -ComputerName remotehost1 -Credential $creds -ScriptBlock {
    Test-Path -Path \\remotehost2\C$\temp\
}

Вы также получите сообщение «Доступ запрещен».

Я предполагаю, что этот пример удался, потому что Windows достаточно умна, чтобы знать, что путь UNC на самом деле указывает на локальную систему.

Invoke-Command -ComputerName remotehost1 -Credential $creds -ScriptBlock {
    Test-Path -Path \\remotehost1\C$\temp\
}

Почему вы используете сетевой путь внутри ScriptBlock? При использовании Invoke-Command с параметром -ComputerName команда выполняется на удаленном компьютере, поэтому ссылка на \remotehost1\C$\temp\ (сетевой путь) в блоке сценария может не потребоваться. Вместо этого вы можете напрямую использовать локальный путь C:\temp\ в удаленном сеансе.

Invoke-Command -ComputerName remotehost -Credential $creds -ScriptBlock {
Test-Path -Path 'C:\temp\'}

Я сделал это только в демонстрационных целях.

dokaspar 14.08.2024 10:39

Другие вопросы по теме