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