2010-05-18 2 views
1

WMI로 IISWebVirtualDir 또는 IISWebVirtualDirSetting을 만들 수 있지만 가상 디렉터리를 IIS 응용 프로그램으로 변환 할 방법이 없습니다. 가상 디렉터리 AppFriendlyName 및 경로를 원합니다. 그것들이 ... Setting 개체의 일부이기 때문에 쉽습니다. 그러나 가상 디렉터리를 응용 프로그램으로 변환하려면 AppIsolated = 2 및 AppRoot = [해당 루트]로 설정해야합니다.WMI/ADSI를 통해 PowerShell v2로 IIS 6 가상 디렉터리 만들기

WMI에서는이 작업을 수행 할 수 없습니다. 차라리 ADSI와 WMI를 섞어 놓지 않으려 고합니다. 그래서 누군가 WMI에서 이런 일이 일어나면 제게 코치 해줄 수있어 매우 행복 할 것입니다.

$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 

어떤 생각 :

여기 내 데모 코드입니까? 작업 코드

$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() 

감사 가렛과 글렌와

업데이트.

+0

또 다른 WMI 우는 소리. WMI는 해당 속성의 상속 여부를 쉽게 식별 할 수있는 속성을 속성에 제공하지 않습니다. ADSI는이를 단순한 부울로 만듭니다. 순수한 WMI에서이 작업을하는 것이 좋겠지 만 쉽게 만들 수는 없습니다. – codepoke

+1

하! 나는 거의 알지 못했다. 한숨. WMI를 사용하여 개체를 만들면 상속이 사라집니다. WMI는 상속 된 모든 속성을 가져 와서 새 개체에 하드 씁니다. 메타베이스는 Willie Wonka의 보라색 소녀처럼 부풀어 오른다. ADSI 속성 인 IsInherit는 찾을 수있는 기회가 아닙니다. 나는 상속 된 소도구 만들기를 지키기 위해 부모/자식을 데려 가야 할 수도 있습니다. 매력적인. – codepoke

답변

1

이 테스트를하지만, 방법이 라인을 따라 뭔가에 대한되지 않습니다

$appCreateParams = $v.PSBase.GetMethodParameters("AppCreate2") 
$appCreateParams["AppMode"] = 2 

$v.PSBase.InvokeMethod("AppCreate2", $appCreateParams, null) 
+0

Garett, 코드가 전혀 작동하지 않았지만 WMI 문서에서 AppCreate2 메서드를 찾아 보았습니다. 그것은 나를 계속 쳐다 보았다. 실제 응답은 $ v.AppCreate2 (2)처럼 간단했고, 저를 다시는 실패로 저주했습니다. :-) 감사! – codepoke

+0

InvokeMethod가 작동해야하지만 구문이 다소 느릴 수 있습니다. 어쨌든 당신이 해결책을 찾을 수 있었다니 기쁩니다. – Garett

1

AppCreate2 명령이 누락 된 것 같습니다. http://arcware.net/creating-iis-applications-with-powershell/

+0

Glenn, 제공 한 링크에 AppCreate2 메서드가 ADSI 개체에서 호출되는 것으로 나타났습니다. 그 냄새를 날려 버렸습니다. (쉽게 혼란스럽고 모든 것이 있습니다. :-)) WMI는 동일한 방법을 제공하지만 원활하게 작동합니다. – codepoke

관련 문제