Добавление папок на удаленные серверы с помощью PowerShell - PullRequest
0 голосов
/ 05 октября 2018

в этом должно быть что-то явно очевидное, что я делаю что-то не так, но мне нужен другой набор глаз, чтобы выручить меня, потому что я не получаю никаких ошибок - он просто не делает то, что я хочу ...Мне нужно поместить файл установщика программного обеспечения в «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» вверху убедился, что единственным результатом был материал, который должен был быть в строке write-host.

Опять же, я чувствую, что это что-то явно очевидное, но я рву свои волосы, чтобы понять это.

1 Ответ

0 голосов
/ 06 октября 2018

Чтобы избежать длительного обсуждения в комментариях, я думаю, что, возможно, нашел то, чего не хватало в вашем коде.Действительно, это было связано с путями, которые вы установили для $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"
    }
}

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...