2013-05-10 2 views
0

목표 : 컴퓨터 이름과 현재 로그온 한 사용자의 변수를 사용하여 네트워크의 여러 컴퓨터에서 네트워크 공유로로 복사합니다.PowerShell RoboCopy 경로 문제

내가 가지고있는 것 : 컴퓨터 이름 목록이있는 txt 파일.

: 도메인 접두사를 제거하기 위해 username 변수에서 사용하는 .split ("\") [1]에서 foreach를 사용할 수 없으므로 robocopy 경로의 출력을 사용할 수 있습니다.

robocopy "\\$computername\c$\documents and settings\$username\backup" "\\networkshare\backup\$username\backup" 

나에게 오류 을 제공

뭔가처럼 당신은 null 값 식에 대해 메서드를 호출 할 수 없습니다. C : \ Scripts \ Test \ backup.ps1 : 13 문자 : 2

내가 지금까지 가지고있는 것입니다. 누군가 제발 도와 줄 수 있니?

function Get-LoggedIn { 
    [CmdletBinding()] 
    param (
     [Parameter(Mandatory=$True)] 
     [string[]]$computername 
    ) 

    foreach ($pc in $computername){ 
     $logged_in = (gwmi win32_computersystem -COMPUTER $pc).username 
     $name = $logged_in.split("\")[1] 
     "{1}" -f $pc,$name 
    } 
} 

$computers = Get-Content "C:\Scripts\testcomputers.txt" 

foreach ($computer in $computers) { 
    $users = Get-LoggedIn $computer 
}  

$SourceFolder = "\\$computer\c$\users\$users\desktop" 
$DestinationFolder = "\\networkshare\backups\$users\backup\desktop" 
$Logfile = "\\networkshare\backups\$users\backup\backuplog.txt" 

Robocopy $SourceFolder $DestinationFolder /E /R:1 /W:1 /LOG:$Logfile 
+0

루프의 모든 컴퓨터에서 제대로 작동합니까? '(gwmi win32_computersystem -COMPUTER $ pc) .username' –

답변

0

나는 여기에 여러 오류를 참조하십시오. foreach 루프 내에서 복사 명령을 실행하지 않습니다.

domain\computer\username (or computer\domain\username, unsure since I'm on non-domain workstation now) 

어쨌든, 사용자 이름은 항상 마지막 부분이기 때문에 인덱스 [-1] 대신를 사용하여 얻을 : WMI에서 받았다 사용자 이름 속성은 종종 다음과 같은 형식이 될 수 있습니다. 업데이트 된 스크립트 (들여 쓰기!) :

function Get-LoggedIn { 
    [CmdletBinding()] 
    param (
     [Parameter(Mandatory=$True)] 
     [string[]]$computername 
     ) 

    foreach ($pc in $computername){ 
     $logged_in = (gwmi win32_computersystem -COMPUTER $pc).username 
     $name = $logged_in.split("\")[-1] 
     "{1}" -f $pc,$name 
    } 
} 

$computers = Get-Content "C:\Scripts\testcomputers.txt" 

foreach ($computer in $computers) { 
    $users = Get-LoggedIn $computer 

    $SourceFolder = "\\$computer\c$\users\$users\desktop" 
    $DestinationFolder = "\\networkshare\backups\$users\backup\desktop" 
    $Logfile = "\\networkshare\backups\$users\backup\backuplog.txt" 

    & Robocopy $SourceFolder $DestinationFolder /E /R:1 /W:1 /LOG:$Logfile 

} 
+0

글쎄, 나는 1PP 답장을받을 담당자가 없지만 그 자리에 있었어. 나는 여전히 오류가 발생하지만 그 일을합니다. 고맙습니다. 위의 첫 번째 경험 stackoverflow.com – user2371642

+0

이 대답을 고려하는 경우 체크 표시를 사용하여 대답을 수락하십시오. –