Skip to content

Instantly share code, notes, and snippets.

@bpatra
Created July 28, 2013 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bpatra/6098637 to your computer and use it in GitHub Desktop.
Save bpatra/6098637 to your computer and use it in GitHub Desktop.
F#-ception. ExecutePsScript
let ExecPsScript<'T> script =
let runspaceConfiguration = RunspaceConfiguration.Create()
let runspaceAssemblies = runspaceConfiguration.Assemblies
let assembliesConfiguration =
PSUsableAssemblies
|> Array.map (fun asm -> new AssemblyConfigurationEntry(asm.FullName, asm.Location))
assembliesConfiguration |> runspaceAssemblies.Append
assembliesConfiguration
|> Array.map (fun asm -> asm.FileName)
|> Array.map (fun path -> new TypeConfigurationEntry(path))
|> runspaceConfiguration.Types.Append
use runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration)
do runspace.Open()
let scriptInvoker = new RunspaceInvoke(runspace)
scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted") |> ignore
let pipeline = runspace.CreatePipeline()
do pipeline.Commands.AddScript(script)
let psObjects = pipeline.Invoke()
if (psObjects.Count <> 1) then failwith "ExecPsScript should only return one psObject"
psObjects.[0].ImmediateBaseObject :?> 'T
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment