Started playing around with WMI in F# in order to update DNS records. After several hours I finally got it working. I ran into some problems on the last line of the function below. Apparently function used with iter() must return "unit" which is the F# equivalent of null. My anonymous function was returning an obj, appending the "; ()" to the end of the function fixed the return type. "()" in F# is the notation for the unit type. The guys from F# hub said this could also be done by using "|> ignore".
let UpdateCNameDNSRecord(record:string, value:string) = let query = String.Format("SELECT * FROM MicrosoftDNS_CNAMEType WHERE OwnerName='{0}'", record) in let scope = (@"\\.\root\MicrosoftDNS") in //new ManagementScope let searcher = new ManagementObjectSearcher(scope, query) in if (not (value.EndsWith("."))) then let value = (value + ".") in let inputP = [|null; box(value)|] in IEnumerable.iter( fun (x:ManagementObject) -> if (x.Item("PrimaryName").ToString() <> value) then x.InvokeMethod("Modify", inputP) |> ignore ) (IEnumerable.untyped_to_typed(searcher.Get()));;Print this post
No comments:
Post a Comment