Как изменить свойство LogFile.Directory через WMI на удаленном компьютере?

С помощью WMI мне удалось получить значение LogFile.Directory для определенного сайта IIS, расположенного на удаленном компьютере. Теперь мне нужно изменить свойство LogFile.Directory — это шаг в процессе автоматизации — но я упираюсь в стену. Это то, что у меня есть до сих пор, хотя это не работает.

    Write-Output "Making IIS connection to $($XmlCloudNodeFullyQualifiedDomainName)"
    $site = Get-WmiObject -ComputerName $XmlCloudNodeFullyQualifiedDomainName -Namespace "root/webadministration" -Class Site -Authentication 6 -Filter "Name = '$IISSiteName'"
    If ($site.Name -eq $IISSiteName) { 
        Write-Output "Found site $IISSiteName"
        Write-Output ("Existing log folder: " + $site.LogFile.Directory)
        $newLogFolder = "E:\" + $IISSiteName + "\logs"
        Write-Output ("Set IIS log folder to " + $newLogFolder)
        $site.LogFile.Directory = $newLogFolder
        $site.Put()
    } 

Я не получаю никаких ошибок. Просто значение LogFile.Directory не меняется на удаленной машине, когда я проверяю IIS Manager. Я читал, что вместо этого я должен использовать Set-WMIInstance, поэтому я попробовал:

    Write-Verbose "Making IIS connection to $($XmlCloudNodeFullyQualifiedDomainName)"
    $site = Get-WmiObject -ComputerName $XmlCloudNodeFullyQualifiedDomainName -Namespace "root/webadministration" -Class Site -Authentication 6 -Filter "Name = '$IISSiteName'"
    $sitePath = (Get-WmiObject -ComputerName $XmlCloudNodeFullyQualifiedDomainName -Namespace "root/webadministration" -Class Site -Authentication 6 -Filter "Name = '$IISSiteName'").__path
    If ($site.Name -eq $IISSiteName) { 
        Write-Output "Found site $IISSiteName"
        $newLogFolder = "E:\" + $IISSiteName + "\logs"
        Write-Output ("Existing log folder: " + $site.LogFile.Directory)
        Set-WmiInstance -Path $sitePath -argument @{LogFile.Directory = $newLogFolder}
        Write-Output ("Set IIS log folder to " + $newLogFolder)
    }

Но это выдает ошибки:

At E:\\Test.ps1:71 char:54
+             Set-WmiInstance -Path $sitePath @{LogFile.Directory = $newLogFolder}
+                                                      ~
Missing '=' operator after key in hash literal.
At E:\\Test.ps1:72 char:18
+             Write-Output ("Set IIS log folder to " + $newLogFolder)
+                  ~
Missing '=' operator after key in hash literal.
At E:\\Test.ps1:41 char:54
+     foreach ($FSMappingNode in $FSMappingNodesArray) {
+                                                      ~

Есть ли способ изменить это конкретное значение удаленно или это свойство доступно только для чтения? Любая помощь будет принята с благодарностью. Спасибо,

// Франческо


person Francesco Gallarotti    schedule 18.04.2016    source источник


Ответы (1)


После долгих возни я наконец нашел способ удаленно изменить LogFile.Directory сайта IIS:

    Write-Output "Making IIS connection to $($XmlCloudNodeFullyQualifiedDomainName)"
    $site = Get-WmiObject -ComputerName $XmlCloudNodeFullyQualifiedDomainName -Namespace "root/webadministration" -Class Site -Authentication 6 -Filter "Name = '$IISSiteName'"
    $sitePath = $site.__path
    Write-Verbose $sitePath
    If ($site.Name -eq $IISSiteName) { 
        Write-Output "Found site $IISSiteName"
        Write-Verbose ("Existing log folder: " + $site.LogFile.Directory)
        $newLogFolder = "E:\" + $IISSiteName + "\logs"
        $siteLogFile = $site.LogFile
        $siteLogFile.Directory = $newLogFolder
        Set-WmiInstance -Path $sitePath -Arguments @{LogFile = $siteLogFile}
        Write-Output ("Set IIS log folder to " + $siteLogFile.Directory)
    }   
person Francesco Gallarotti    schedule 18.04.2016