---
title: "PSEnsure using Scripts"
---
Uses two PowerShell scripts to Collect, and then Ensure a configuration about a server.
PSEnsureScripts(
	Key: <text>,
	Value: <text>,
	[Collect: <text>],
	[Configure: <text>],
	[CollectScript: <text>],
	[ConfigureScript: <text>],
	[UseExitCode: <true/false>],
	[Debug: <true/false>],
	[Verbose: <true/false>],
	[CollectScriptParams: <%(key1: value1, ...)>],
	[ConfigureScriptParams: <%(key1: value1, ...)>]
);
This operation may be prefixed with PowerShell::, although this is a built-in namespace and isn't really necessary.
| Name | Format | Script Usage | Usage Notes | 
|---|---|---|---|
| ☆ Configuration key | text | Key | This argument is required. | 
| ☆ Expected value | text | Value | This argument is required. | 
| Collection script | text | Collect | The output of this PowerShell script will be used to collect the current configuration of the server. Variables are not expanded within the contents of this property. | 
| Configure script | text | Configure | This PowerShell script is executed if the configuration gathered using the collection script does not match the stored configuration. Variables are not expanded within the contents of this property. | 
| Collection script asset | text | CollectScript | The name of a PowerShell script asset to use for collection. The output of this PowerShell script will be used to collect the current configuration of the server. | 
| Configuration script asset | text | ConfigureScript | The name of a PowerShell script asset to use for configuration. This script is executed if the configuration gathered using the collection script does not match the stored configuration. | 
| Use exit code | true/false | UseExitCode | When set, the exit/return code of the script will be used instead of the output stream for collection. | 
| Debug | true/false | Debug | Captures the PowerShell Write-Debug stream into Otter's execution debug log. | 
| Verbose | true/false | Verbose | Captures the PowerShell Write-Verbose stream into Otter's execution debug log. | 
| Collection script parameters | %(key1: value1, ...) | CollectScriptParams | Map containing named arguments to pass to the PowerShell collect script. | 
| Configure script parameters | %(key1: value1, ...) | ConfigureScriptParams | Map containing named arguments to pass to the PowerShell configure script. | 
Note: The Key is a unique string per server, and having multiple operations attempt to use the same key will yield in unpredictable behavior.
# ensures the BuildMaster Agent service exists on the remote server
PSEnsure(
    Key: BuildMasterAgentInstalled,
    # returns the count of INEDOBMAGT services installed
    Collect: @(Get-Service | Where-Object {$_.Name -eq "INEDOBMAGT"}).Count,
    # expected value is 1
    Value: 1,
    # if the returned value is 0 instead of 1, the installer will run
    Configure: & '\\filesrv1000\$e\Resources\BuildMasterAgentSetup.exe' /S /AgentType=TCP /Port=8080,
    Debug: true,
    Verbose: true
);
# ensures the BuildMaster Agent service exists on the remote server, using a
# PowerShell script asset to perform the configuration
PSEnsure(
    Key: BuildMasterAgentInstalled,
    # returns the count of INEDOBMAGT services installed
    Collect: @(Get-Service | Where-Object {$_.Name -eq "INEDOBMAGT"}).Count,
    # expected value is 1
    Value: 1,
    # use script stored in InstallBmAgent asset
    ConfigureScript: InstallBmAgent,
    ConfigureScriptParams: %(
        AgentType: TCP,
        Port: 1000),
    Debug: true,
    Verbose: true
);