Добавление папок на удаленные серверы с помощью PowerShell
В этом должно быть что-то явно очевидное, что я делаю что-то не так, но мне нужен еще один взгляд, чтобы выручить меня, потому что я не получаю никаких ошибок - он просто не делает то, что я хочу... Мне нужно переместите файл установщика программного обеспечения в "X:\folder\Software Install Files" и создайте резервную копию существующих файлов в "X:\folder\Software Backups" на нескольких разных серверах. Чтобы сделать это, мне нужно сначала убедиться, что эти папки существуют, и создать их, если они не существуют. Приведенный ниже скрипт собирает переменную $ computer из файла servers.txt, затем для каждого компьютера я просматриваю реестр, чтобы выяснить, на какой диск установлено программное обеспечение, а затем создать соответствующие папки на диске, если они не существуют.:
# This file contains the list of Servers
$computers = gc "C:\Folder\Subfolder\Servers.txt"
clear-host
# The Command below pulls all the variables above and performs the file copy
foreach ($computer in $computers) {
#Gather Version and Program Directory Information from Registry
$machinename = $computer
$icakey = "SOFTWARE\\Wow6432Node\\Program\\Program"
$ICAVers = "Version"
$ICADrive = "InstallDir"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',
$machinename)
$icaregkey = $reg.opensubkey($icakey)
$ICAV = $icaregkey.getvalue($IcaVers)
$ICAD = $icaregkey.getvalue($IcaDrive)
#Declare Directory Drive Letter As Variable
$DriveLetter,$Folder = $ICAD.split(":")
#Declare path for folders
$Softwarepath = "\\$computer\$driveletter$\Folder\Software Install Files"
$BackupPath = "\\$computer\$driveletter$\Folder\Software Backups"
#Create Software Folder
If(test-Path -path $SoftwarePath)
{Write-host "$SoftwarePath already exists on $computer" -ForegroundColor Red}
ELSE
{{New-Item -Path $SoftwarePath -ItemType Directory}
{write-host "$SoftwarePath created on $computer"}}
#Create WebAccess Backups Folder
If(test-Path -path $BackupPath)
{Write-host "$BackupPath already exists on $computer" -ForegroundColor Red}
ELSE
{{New-Item -Path $BackupPath -ItemType Directory}
{write-host "$BackupPath created on $computer"}}
Результаты, которые я получаю, показывают это для каждого сервера в Servers.txt:
New-Item -Path $SoftwarePath -ItemType Directory
write-host "$SoftwarePath created on $computer"
New-Item -Path $BackupPath -ItemType Directory
write-host "$BackupPath created on $computer"
На самом деле это не создание папки, и в прошлые разы я делал что-то вроде этого, переменные в результате отображали значение, которое они представляли, а "clear-host" вверху удостоверился, что единственным результатом был материал, который должен был быть в строке записи хоста.
Опять же, я чувствую, что это что-то явно очевидное, но я рву свои волосы, чтобы понять это.
1 ответ
Чтобы избежать длительного обсуждения в комментариях, я думаю, что я мог найти то, чего не хватало в вашем коде. На самом деле это было связано с путями, которые вы создали $Softwarepath
а также $BackupPath
где ты забыл $
подписать перед Folder
, Каталоги, вероятно, были созданы, но не там, где вы ожидали. Они закончили в \\computername\X$\Folder\Software Install Files
,
В любом случае, вот пересмотренная версия вашего кода:
# This file contains the list of Servers
$computers = Get-Content "C:\Folder\Subfolder\Servers.txt"
clear-host
# The Command below pulls all the variables above and performs the file copy
foreach ($computer in $computers) {
#Gather Version and Program Directory Information from Registry
$machinename = $computer
$icakey = "SOFTWARE\\Wow6432Node\\Program\\Program"
$ICAVers = "Version"
$ICADrive = "InstallDir"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $machinename)
$icaregkey = $reg.opensubkey($icakey)
$ICAV = $icaregkey.getvalue($IcaVers)
$ICAD = $icaregkey.getvalue($IcaDrive)
#Close the registry keys when done
$icaregkey.Close()
$reg.Close()
#Declare Directory Drive Letter As Variable
$DriveLetter,$Folder = $ICAD.split(":")
#Declare path for folders
$Softwarepath = "\\$computer\$driveletter$\$Folder\Software Install Files"
$BackupPath = "\\$computer\$driveletter$\$Folder\Software Backups"
#Create Software Folder
if(Test-Path -Path $SoftwarePath -PathType Container) {
Write-Host "$SoftwarePath already exists on $computer" -ForegroundColor Red
}
else {
New-Item -Path $SoftwarePath -ItemType Directory -Force
Write-Host "$SoftwarePath created on $computer"
}
#Create WebAccess Backups Folder
if(Test-Path -Path $BackupPath -PathType Container) {
Write-Host "$BackupPath already exists on $computer" -ForegroundColor Red
}
else {
New-Item -Path $BackupPath -ItemType Directory -Force
Write-Host "$BackupPath created on $computer"
}
}
надеюсь, это поможет