PowerShell Quick Start
PowerShell commands can be used to configure the backend of your project. Workbench has a PowerShell module for each provider. Every module allows you to perform the following actions in the configuration databases:
-
Create entities
-
Read entities
-
Update entities
-
Delete entities
Getting Started
Open the Windows Start menu and type “Windows PowerShell ISE”. This tool allows you to write PowerShell commands directly in the command line or create scripts and save them as .ps1 files.
Our first command will be:
Get-Module - ListAvailable - Name *Powershell
A list of modules that support PowerShell commands will be shown.
Available Workbench PowerShell modules
To get a closer look at the commands each module supports, type:
Get-Command -Module IcoHHPowershell
In the example above, a series of Hyper Historian configuration commands will be listed.
Available commands in IcoHHPowerShell module
For each PowerShell command, it is possible to show help information. The following command will show the full parameter definition of the New-HHTag command:
Get-Help New-HHTag –full
Full Help for New-HHTag command
The New-HHTag command will create a new Hyper Historian tag, and this Get-Help command will list all of the possible parameters New-HHTag, along with a short description and which ones are mandatory.
We can create a new historical tag for Hyper Historian using an existing collector and logging group with the following three commands:
$CollectorGrp_key = (Get-HHCollectorGroup 'Collector Group (1 second)').Key
$LoggingGrp_key = (Get-HHLoggingGroup 'Sample Logging Group').Key
New-HHTag -Name Sine -CollectorGroupID $CollectorGrp_key -LoggingGroupID $LoggingGrp_key -DataSource '@sim64:Float.Sine(10,-5.0,5.0,62).Value'
For the New-HHTag command, the CollectorGroupID and LoggingGroupID parameters are mandatory. They both take an EnitityUniqueKey. We used the Get-HHCollectorGroup and Get-HHLoggingGroup commands to get the key for our desired collector and logging groups. We stored those keys into two variables, $CollectorGrp_key and $LoggingGrp_key, then passed those keys into the New-HHTag command.
Security
Workbench’s PowerShell interface supports ICONICS Security. If the logged-in user is not allowed to delete or modify the configuration, they will get a message that this command is not allowed. (If a user does not have permission to take an action in standard Workbench, they will be not be able to perform the action using PowerShell commands either.)
Workbench PowerShell Security
Remote Server Configuration
As in the usual Workbench environment, it is possible to configure a remote Server using PowerShell. The following command will show the current Workbench host:
Get-WbHost
This command will change to a different Workbench host:
Set-WbHost COMPUTERNAME
After running Set-WbHost, every subsequent configuration command will now apply to the remote Workbench’s configuration.
Pipeline and Key Support
Workbench PowerShell supports key variables, so you can store configuration information in a key variable and use it for other commands.
This example will get a global alias named BuildingIdent, which has the ID 2 in the sample configuration database, and store it to a key variable for future use:
$alias_key = New-WbKey -TypeName GasAlias -Id 2
Now, because we have stored the global alias as a key, these two commands should have the same result:
Get-GasAlias $alias_key
Get-GasAlias BuildingIdent
It is possible to pipeline the result of one command and use it in a second command. This example loads the configuration of the global alias named Building and selects its ThemeID property:
Get-GasAlias Building | Select-Object -Property ThemeID
Script Examples
Workbench PowerShell supports Scripts, which can be saved as .ps1 files. These Scripts can be used to automate your configuration process. The following are some script examples.
Create ten new Global Aliases:
for($i=1; $i -le 10; $i++)
{
$alias_name = 'Alias_' + $i
New-GasAlias $alias_name
}
Create a new user in the security configuration and set its permission:
# importing the cryptography module
Import-Module ”C:\Program Files\ICONICS\GENESIS64\Components\IcoSecurityCryptography.dll”
# getting the date
$utcDate = [System.DateTime]::UtcNow
# creating a password
$password = [Ico.Security.Cryptography.PasswordHashing]::SaltAndHash("a")
# getting the default policy
$default_policy_key = New-WbKey -TypeName SecAccountPolicy -Id 1
# getting the configuration key
$global_setting_key = New-WbKey -TypeName SecGlobalSetting -Id 1
# disabling the security
Set-SecGlobalSetting $global_setting_key -SecurityEnabled 0
# creating a new user
New-SecUser Paolo -AccountPolicyID $default_policy_key -CreateDate $utcDate
# setting the permissions
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type ApplicationAction -Path '*' -Mask 1
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type DataPoint -Path '*' -Mask 3
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type Alarm -Path '*' -Mask 1
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type File -Path '*' -Mask 7
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type Station -Path '*' -Mask 1
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type Custom -Path '*' -Mask 1
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type Method -Path '*' -Mask 1
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type Asset -Path '*' -Mask 3
New-SecUserAcl -ParentName Paolo -AllowDeny 1 -Type MobileLayout -Path '*' -Mask 3
# setting its password
New-SecPassword -ParentName Paolo -PasswordHash $password -CreateDate $utcDate
# re-enabling the security
Set-SecGlobalSetting $global_setting_key -SecurityEnabled 1
Create a network alias for an OPC UA Server and three historical Hyper Historian tags for data logging:
#Creating FrameWorX UA Network Alias
New-FwxOuterServer -Name OPCUATEST -PrimaryEndPointUri "opc.tcp://OPCSERVER:48010 - [None:None:Binary]"
#creating a HH Tags folder
New-HHFolder OPCUAServer_Powershell_Example
# creating the logging group
$logging_group = New-HHLoggingGroup LoggingGroup -ParentName 'Data Logger'
# getting the collector pair
$collector_pair = Get-HHCollectorPair 'Local Collector'
# creating the collector group
$collector_group = New-HHCollectorGroup CollectorGroup -ParentName LoggingGroup -CollectorPairID $collector_pair.Key
# creating an empty key
$logging_group_key = New-WbEmptyKey
#creating three HH Tags
New-HHTag Int16_Powershell_Example -ParentName OPCUAServer_Powershell_Example -CollectorGroupID $collector_group.Key -LoggingGroupID $logging_group_key -DataSource 'ua:OPCUATEST\\[http://www.unifiedautomation.com/DemoServer/]Demo/Dynamic/Scalar/Int16'
New-HHTag Int64_Powershell_Example -ParentName OPCUAServer_Powershell_Example -CollectorGroupID $collector_group.Key -LoggingGroupID $logging_group_key -DataSource 'ua:OPCUATEST\\[http://www.unifiedautomation.com/DemoServer/]Demo/Dynamic/Scalar/Int64'
New-HHTag Double_Powershell_Example -ParentName OPCUAServer_Powershell_Example -CollectorGroupID $collector_group.Key -LoggingGroupID $logging_group_key -DataSource 'ua:OPCUATEST\\[http://www.unifiedautomation.com/DemoServer/]Demo/Dynamic/Scalar/Double'
HH Tags created with the script
See Also: