2017-12-28 67 views
1

몇 가지 다른 웹 서버에서 파일을 간단히 업데이트하는 powershell 스크립트가 있습니다. 각 웹 서버에는 문제의 파일에 액세스하기 위해 제공해야하는 다른 로컬 자격 증명이 있습니다. 이를 위해 스크립트를 어떻게 업데이트 할 수 있습니까?세트 콘텐츠 호출에 고유 한 자격 증명을 제공하는 방법

#message 
$statusMessage = "hello world" 

#servers to update 
$servers = @("1.1.1.1","2.2.2.2") 

#update files 
foreach ($server in $servers) { 
    Set-Content -Path "\\$server\c$\blah\foo.htm" -Value $statusMessage 
} 

다시 말하지만 각 서버에는 자신이 사용해야하는 로컬 관리자 자격 증명이 있습니다.

+0

왜 로컬 자격 증명이 필요합니까? 왜 모든 서버에 액세스 할 수있는 도메인 계정이 필요합니까? –

+0

@Bill_Stewart 현재/불행한 제한 사항, 내가 할 수있는 최선의 방법은 일치하는 로컬 자격 증명이 있습니다. –

+1

불행히도'-Credential'은'Set-Content'와 함께 작동하지 않습니다. ('Help Set-Content -Full'을 실행하십시오 - "이 매개 변수는 Windows PowerShell과 함께 설치된 모든 공급자에서 지원되지 않습니다.")라는 메모가 있습니다. –

답변

2

로컬 계정을 사용하는 것이 실제로 강제되는 경우 (이 문제를 방지하려면 도메인을 갖는 목적 중 하나임) net use을 사용하여 서버에서 인증 한 다음 파일을 복사하고 연결을 끊어야합니다. 예 : 루프 내에서 컴퓨터 이름을 일반화 할 수 물론

$userName = Read-Host "Enter user name for computer1" 
net use \\computer1\ipc$ /user:$userName * 
Set-Content \\computer1\c$\whatever\file.htm "Content here" 
net use \\computer1\ipc$ /delete 

. 이 예에서는 각 컴퓨터의 사용자 이름과 암호를 수동으로 입력해야합니다.

1

Set-Content-Credential 매개 변수는 기본적으로 3 옵션 AFAICS이 실제로 (Bill_Stewart pointed out로) 작동하지 않기 때문에 : 빌 his answer에 제안 다음에 기록 세션을 인증하기 위해

  • 사용 net use을 UNC 경로. 원격 서버에

    $username = 'Administrator' 
    $password = ConvertTo-SecureString 'password' -AsPlainText -Force 
    $cred = New-Object Management.Automation.PSCredential ($username, $password) 
    
    $drive = New-PSDrive -Name X -PSProvider FileSystem -Root "\\$server\c$\blah" -Persist -Credential $cred 
    Set-Content -Path 'X:\foo.htm' -Value $statusMessage 
    $drive | Remove-PSDrive 
    
  • 실행 Set-Content을 그리고 로컬 경로에 쓸 수있다 :

  • 중 하나 net use 또는 포쉬 방법을 통해, 네트워크 드라이브를 매핑합니다. PowerShell을 모두 들어

$username = 'Administrator' 
$password = ConvertTo-SecureString 'password' -AsPlainText -Force 
$cred = New-Object Management.Automation.PSCredential ($username, $password) 

Invoke-Command -Computer $server -ScriptBlock { 
    Param($msg) 
    Set-Content -Path C:\blah\foo.html -Value $msg 
} -ArgumentList $statusMessage -Credential $cred 

는 위의 그림과 같이 PSCredential 객체를 준비하거나 사용자 이름 (이 경우 사용자가 암호를 입력하라는 메시지가 표시됩니다)을 통과해야 접근한다.

+1

리모팅이 이미 설정되어 있다면'Invoke-Command'를 좋아합니다. –