0

目的: マシン名と現在ログオンしているユーザーの両方の変数を使用して、ネットワーク上の複数のマシンからネットワーク共有にロボ コピーします。

私が持っているもの:コンピューター名のリストを含むtxtファイル。

問題: foreach を .split("\")[1] で動作させることができません。ユーザー名変数で使用してドメイン プレフィックスを削除し、そこからの出力を 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
4

1 に答える 1

0

ここに複数のエラーが表示されます。foreach ループ内でコピー コマンドを実行していません。WMI から受信したユーザー名プロパティは、多くの場合、次の形式になります。

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

とにかく、ユーザー名は常に最後の部分なので、[-1]代わりにインデックスを使用して取得してください。更新されたスクリプト (インデント付き!):

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

}  
于 2013-05-10T22:58:06.753 に答える