# Windows Powershell script runner This crate is pretty basic. It uses `std::process::Command` to pipe commands to PowerShell. In addition to that there is a convenient wrapper around `process::Output` especially tailored towards the usecase of running Windows PowerShell commands. ## Usage I recommend that you write the commands to a `*.ps` file to be able to take advantage of existing tools to create the script. This example creates a shortcut of `notepad.exe` to the desktop. **In `script.ps`** ```ps $SourceFileLocation="C:\Windows\notepad.exe" $ShortcutLocation=[Environment]::GetFolderPath("Desktop")+"\notepad.lnk" $WScriptShell=New-Object -ComObject WScript.Shell $Shortcut=$WScriptShell.CreateShortcut($ShortcutLocation) $Shortcut.TargetPath=$SourceFileLocation $Shortcut.Save() ``` **In `main.rs`** ```rust use powershell_script; fn main() { let create_shortcut = include_str!("script.ps"); match powershell_script::run(create_shortcut) { Ok(output) => { println!("{}", output); } Err(e) => { println!("Error: {}", e); } } } ``` You can of course provide the commands as a string literal instead. Just beware that we run each `line` as a separate command. The flag `print_commands` can be set to `true` if you want each command to be printed to the `stdout` of the main process as they're run which can be useful for debugging scripts or displaying the progress. ## Use the `PsScriptBuilder` for better control Instead of running a script using `powershell_script::run()` you can use `PsScriptBuilder` to configure several options: ```rust use powershell_script::PsScriptBuilder; fn main() { let ps = PsScriptBuilder::new() .no_profile(true) .non_interactive(true) .hidden(false) .print_commands(false) .build(); let output = ps.run(r#"echo "hello world""#).unwrap(); assert!(output.stdout().unwrap().contains("hello world")); } ``` ## Features and compatability On Windows it defaults to using the PowerShell which ships with Windows, but you can also run scripts using PowerShell Core on Windows by enabling the `core` feature. On all other operating systems it will run scripts using PowerShell core. ## Contributing Right now this is only meant as a convenient wrapper for running PowerShell scripts, and I've been thinking about creating a `utils` crate with common tasks on Windows like creating a shortcut to a file (symlinking requires administrative privileges) but that will be better off in a separate create so this can focus on running scripts. Any pull requests with bugfixes or efficiency improvements is greatly appreciated.