0

我正在寻找编写一个 powershell 脚本来在服务器上的所有用户配置文件中搜索特定文件,按 lastmodifieddate 比较文件,然后将最新文件复制到所有用户配置文件。该脚本还将创建文件最后三个版本的备份。

我之前为我们的试点环境编写了这个脚本,只有两个人访问该应用程序(这是针对 XenApp),但用户群现在已经扩大,我想创建脚本的 prod 版本以涵盖未来的增长。

任何帮助将不胜感激。谢谢!下面的脚本...

$SRC1 = "\\Server\c$\Users\XXXX1\AppData\Roaming\EMIESiteListManager\sitelist.xml"
$SRC2 = "\\Server\c$\Users\XXXX2\AppData\Roaming\EMIESiteListManager\sitelist.xml"
$SRC3 = "\\Server\c$\Users\XXXX3\AppData\Roaming\EMIESiteListManager\sitelist.xml"
$BKU = "\\storage\IT\EMSLM\Backup"

if ( (get-item $SRC1).LastWriteTime -gt (get-item $SRC2).LastWriteTime )  {Copy-Item $SRC1 $SRC2}
    else {Copy-Item $SRC2 $SRC1}

if ( (get-item $SRC1).LastWriteTime -gt (get-item $SRC3).LastWriteTime )  {Copy-Item $SRC1 $SRC3}
    else {Copy-Item $SRC3 $SRC1}

if ( (get-item $SRC1).LastWriteTime -gt (get-item $SRC2).LastWriteTime )  {Copy-Item $SRC1 $SRC2}


Remove-Item $BKU\sitelist_old_2.xml
Rename-Item $BKU\sitelist_old_1.xml $BKU\sitelist_old_2.xml
Rename-Item $BKU\sitelist.xml $BKU\sitelist_old_1.xml
Copy-Item $SRC1 $BKU

& 'C:\Program Files (x86)\Enterprise Mode Site List Manager\EMIESiteListManager.exe'

Exit
4

2 回答 2

0

这不是一切,但它应该是一个很好的起点

$users = dir "\\Server\c$\Users" -Directory | select -ExpandProperty fullname
$newest = dir "\\Server\c$\Users\*\AppData\Roaming\EMIESiteListManager\sitelist.xml" | sort lastwritetime -Descending | select -First 1 -ExpandProperty fullname

$files = @()

$users | % {
    $files += $newest -replace [regex]::Escape($_)
}

$newestEnd = $files | sort {$_.length} | select -f 1

$users | % {
    $dest = Join-Path $_ $newestEnd
    copy $newest $dest -force
}
于 2015-12-18T05:32:38.170 回答
0

根据 Anthony Stringer 的回复,我能够构建一个满足我确切需求的脚本。Anthony 的脚本本来可以工作,但缺少一些我想要的东西:

1.) 使用现有的 sitelist.xml 文件识别所有配置文件并将其放入数组或哈希表中。

2.)仅复制到存在 sitelist.xml 文件的那些用户配置文件(我的错,我在最初的问题中从未要求过这个)

谢谢安东尼的起点。更新脚本如下:

$Users = dir "\\server\c$\Users" -Directory -Exclude Public, Default, Administrator* | select -ExpandProperty fullname
$FilePath = "AppData\Roaming\EMIESiteListManager\sitelist.xml"
$UserPath = Join-Path -path $Users $filePath
$NewestFile = dir "\\server\c$\Users\*\AppData\Roaming\EMIESiteListManager\sitelist.xml" | sort lastwritetime -Descending | select -First 1 -ExpandProperty fullname
$BackUp = "\\storage\ctxvol01\appdata\IT\EMSLM\Backup"
$BackUpFile = "\\storage\ctxvol01\appdata\IT\EMSLM\Backup\sitelest.xml"

$EMSLM_Users = @()

$UserPath | ForEach {
    If ((Test-Path -path $_) -eq $true)
        {$EMSLM_Users += $_}
    }

$EMSLM_Users | ForEach-Object {
        Copy-Item $NewestFile $_ -force -erroraction silentlycontinue
    }

If ($NewestFile.lastwritetime -gt $BackUpFile.lastwritetime)
    {
        Remove-Item $BackUp\sitelist_old_2.xml -and Rename-Item $BackUp\sitelist_old_1.xml $BackUp\sitelist_old_2.xml -and Rename-Item $BackUp\sitelist.xml $BackUp\sitelist_old_1.xml -and Copy-Item $NewestFile $BackUp
    }

& 'C:\Program Files (x86)\Enterprise Mode Site List Manager\EMIESiteListManager.exe'

Exit
于 2015-12-21T00:02:12.940 回答