Je peux créer un IISWebVirtualDir ou IISWebVirtualDirSetting avec WMI, mais je n'ai trouvé aucun moyen de transformer le répertoire virtuel en une application IIS. Le répertoire virtuel veut AppFriendlyName et un chemin. C'est facile parce qu'ils font partie de l'objet Setting. Mais pour transformer le répertoire virtuel en App, vous devez définir AppIsolated = 2 et AppRoot = [sa racine].Création d'un répertoire virtuel IIS 6 avec PowerShell v2 sur WMI/ADSI
Je ne peux pas faire cela avec WMI. Je préfère ne pas mélanger ADSI et WMI, donc si quelqu'un peut m'entraîner pour que cela se produise dans WMI, je serais très heureux.
Voici mon code de démonstration:
$server = 'serverName'
$site = 'W3SVC/10/ROOT/'
$app = 'AppName'
# If I use these args, the VirDir is not created at all. Fails to write read-only prop
# $args = @{'Name'=('W3SVC/10/ROOT/' + $app); `
# 'AppIsolated'=2;'AppRoot'='/LM/' + $site + $app}
# So I use this single arg
$args = @{'Name'=($site + $app)}
$args # Look at the args to make sure I'm putting what I think I am
$v = set-wmiinstance -Class IIsWebVirtualDir -Authentication PacketPrivacy `
-ComputerName $server -Namespace root\microsoftiisv2 -Arguments $args
$v.Put()
# VirDir now exists
# Pull the settings object for it and prove I can tweak it
$filter = "Name = '" + $site + $app + "'"
$filter
$v = get-wmiobject -Class IIsWebVirtualDirSetting -Authentication PacketPrivacy `
-ComputerName $server -Namespace root\microsoftiisv2 -Filter $filter
$v.AppFriendlyName = $app
$v.Put()
$v
# Yep. Changes work. Goes without saying I cannot change AppIsolated or AppRoot
# But ADSI can change them without a hitch
# Slower than molasses in January, but it works
$a = [adsi]("IIS://$server/" + $site + $app)
$a.Put("AppIsolated", 2)
$a.Put("AppRoot", ('/LM/' + $site + $app))
$a.Put("Path", "C:\Inetpub\wwwroot\news")
$a.SetInfo()
$a
Toute pensée?
Mise à jour avec le code de travail
$server = 'serverName'
$site = 'W3SVC/11/ROOT/'
$app = 'AppName'
$path = "c:\inetpub\wwwroot\news"
$args = @{'Name'=($site + $app)}
$v = set-wmiinstance -Class IIsWebVirtualDir -Authentication PacketPrivacy
-ComputerName $server -Namespace root\microsoftiisv2 -Arguments $args
$v.AppCreate2(2)
$filter = "Name = '" + $site + $app + "'"
$v = get-wmiobject -Class IIsWebVirtualDirSetting -Authentication PacketPrivacy
-ComputerName $server -Namespace root\microsoftiisv2 -Filter $filter
$v.AppFriendlyName = $app
$v.Path = $path
$v.Put()
Merci Garrett et Glenn.
Un autre pleurnicher WMI. WMI ne fournit aucune propriété sur les propriétés pour identifier facilement si cette propriété est héritée. ADSI en fait un simple booléen. J'adorerais le faire en WMI pur, mais ils ne le rendent pas facile. – codepoke
Ha! Je ne savais pas. Soupir. Lorsque vous créez un objet à l'aide de WMI, l'héritage est simplement époustouflé. WMI introduit toutes les propriétés héritées et les écrit dur dans le nouvel objet. La métabase gonfle comme la fille violette de Willie Wonka. La propriété ADSI IsInherit, cependant, n'est pas un cakewalk à trouver. Je peux finir par avoir à marcher parent/enfant pour éviter de créer des accessoires mieux hérités. Charmant. – codepoke