سؤال

وكيف يمكنني الحصول على مسار الدليل الفعلي لتطبيق IIS (المجلد الظاهري) باستخدام WMI؟

هل كانت مفيدة؟

المحلول

استخدم Scriptomatic V2 ادوات لعرض مزيد من العينات من هذا القبيل:

On Error Resume Next

Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20

arrComputers = Array("*") For Each strComputer In arrComputers WScript.Echo WScript.Echo "==========================================" WScript.Echo "Computer: " & strComputer WScript.Echo "=========================================="

Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\MicrosoftIISv2") Set colItems = objWMIService.ExecQuery("SELECT * FROM IIsWebVirtualDir_IIsWebVirtualDir", "WQL", _ wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems WScript.Echo "GroupComponent: " & objItem.GroupComponent WScript.Echo "PartComponent: " & objItem.PartComponent WScript.Echo Next Next

نصائح أخرى

وبالتأكيد، انها 3 سنوات من العمر، ولكن انها مسألة صغيرة لطيفة. إذا مواصفات الحل يجب أن تستخدم. NET تتضمن بوويرشيل، ثم هذا سوف تفعل خدعة. قد يرغب شخص ما أن يعرف في يوم من الأيام:

$server = 'ServerName'
$query = "Select Path From IIsWebVirtualDirSetting WHERE Name = 'W3SVC/1/ROOT'"
Get-WmiObject -namespace "root/microsoftiisv2" -query $query -computername $server -authentication 6

وسيحتوي الكائن الناتجة خاصية واحدة عن اسمه، "المسار".

وهنا خيار صافي البحتة التي يجب أن تكون العودة إلى نفس نتيجة الجواب Isalamon ل.

WmiMacros

واستخدام نموذج (استبدال strComputer)

Macros.WmiMacros.QueryWmiAdvanced  (Macros.WmiMacros.ScopeItem.Creation("\\\\strComputer\\root\\MicrosoftIISv2", true,true)) "SELECT * FROM IIsWebVirtualDir_IIsWebVirtualDir"
|> Seq.map (fun e-> e.Properties.["GroupComponent"].Value, e.Properties.["PartComponent"].Value)

والاستخدام الأقصى أكثر تفصيلا:

let webServerSettings = 
    Macros.WmiMacros.QueryWmiAdvanced  (Macros.WmiMacros.ScopeItem.Creation("\\\\strComputer\\root\\MicrosoftIISv2", true,true)) "SELECT Name,ServerComment FROM IIsWebServerSetting" 
    |> Seq.map (fun e -> e.Properties.["Name"].Value,e.Properties.["ServerComment"].Value)
let webVirtualDirs = 
    Macros.WmiMacros.QueryWmiAdvanced  (Macros.WmiMacros.ScopeItem.Creation("\\\\strComputer\\root\\MicrosoftIISv2", true,true)) "SELECT AppRoot,Name FROM IIsWebVirtualDir"
    |> Seq.map (fun e -> e.Properties.["Name"].Value,e.Properties.["AppRoot"].Value)
let webVirtualDirSettings = 
    Macros.WmiMacros.QueryWmiAdvanced  (Macros.WmiMacros.ScopeItem.Creation("\\\\strComputer\\root\\MicrosoftIISv2", true,true)) "SELECT Name,Path,AppPoolId FROM IIsWebVirtualDirSetting"
    |> Seq.map (fun e -> e.Properties.["Name"].Value,e.Properties.["Path"].Value,e.Properties.["AppPoolId"].Value)
// webServerSettings.Dump("ss");
// webVirtualDirs.Dump("vd");
query { 
    for name,sc in webServerSettings do 
    join (vname,appRoot) in webVirtualDirs on ((name.ToString() + "/ROOT") = vname.ToString())
    join (sname,path,appPoolId) in webVirtualDirSettings on (name.ToString()+ "/ROOT" = sname.ToString() )
    select (appRoot,name,sc,path,appPoolId)
    }

وتنفيذ التعليمات البرمجية مفصل:

type ScopeItem = 
    | Scope of ManagementScope
    | Creation of string*bool*bool

let private createAdvancedScope (path:string) requiresDomainSecurity requiresPacketSecurity = 
    let scope = 
        if requiresDomainSecurity then  
            let conn = ConnectionOptions(Authority=sprintf "ntlmdomain:%s" Environment.UserDomainName)
            ManagementScope(path, conn)
        else 
        ManagementScope(path, null)
    if requiresPacketSecurity then scope.Options.Authentication <- AuthenticationLevel.PacketPrivacy
    scope.Connect()
    scope

let QueryWmiAdvanced (scopeInput: ScopeItem) query = 
        let scope = 
            match scopeInput with
            | Scope s -> s
            | Creation (path, requiresDomainSecurity, requiresPacketSecurity) -> createAdvancedScope path requiresDomainSecurity requiresPacketSecurity
            // createAdvancedScope path requiresDomainSecurity requiresPacketSecurity
        let query = new ObjectQuery(query)
        use searcher = new ManagementObjectSearcher(scope, query)
        use results = searcher.Get()
        results |> Seq.cast<ManagementObject>  |> Array.ofSeq
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top