Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
Using Powershell to set Multiple timed.servers with variables
2015-07-23
10:48 PM
6,084 Views
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Having an issue using PowerShell to set 3 timed.servers which are defined in a variable.
Running the commands:
$TimeServers = "IPaddress1,IPaddress2,IPaddress3"
Set-NaOption -OptionName timed.servers -OptionValue $TimeServers
Thanks in advance!
Solved! See The Solution
1 ACCEPTED SOLUTION
kramanella has accepted the solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ahh, from Matt's observations and my own experiments, this looks like a bug in the zapi.
The first time I try setting multiple time servers, the zapi reports an error but sets it correctly none-the-less. If I repeat the same zapi call one more time, the call returns success. Same behavior is repeated when using the PSTK cmdlets as well - since they internally call the zapi.
Another alternate (to Matt's) workaround is to run the Set-NaOption with ErrorAction set as 'SilentlyContinue' and then use the Get-NaOption to check if timeserver was set correctly. If not set correctly, the script should throw an error.
4 REPLIES 4
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What is the error you see?
I suspect if you initialize the string as $timeServers = '"IP1,IP2,IP3"' (note the value of the string becomes "IP1,IP2,IP3" and that value is enclosed in single '), it will work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
So my goal is to only change one variable in one location in the script, as a result I have nested variables. Here's a more complete view into what I'm trying to accomplish:
# this is the only variable to change
$subnet = "xx"
$TimeServers = "xxx.xx.$subnet.50,xxx.xx.$subnet.51,xxx.xx.$subnet.2"
Set-NaOption -OptionName timed.servers -OptionValue $TimeServers
The output of Write-Host $TimeServers looks good, 3 comma seperated ip addresses with
Here's the error message when the script runs:
Set-NaOption : Unable to set option: timed.servers
At P:\My Documents\WindowsPowerShell\timed_servers.ps1:57 char:1
+ Set-NaOption -OptionName timed.servers -OptionValue $TimeServers
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (xxx.xx.xx.xx:NaController) [Set-NaOption], EAPIERROR
+ FullyQualifiedErrorId : ApiException,DataONTAP.PowerShell.SDK.Cmdlets.Options.SetNaOption
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
The Set-NaOption CmdLet -optionvalue parameter expects a string and it shouldn't matter if that's a comma delimited string containing multiple IP Addresses. I noticed that whilst the cmdlet thows an error it does actually set the option value for all servers so this seems like it could be a bug (IMO). It might be possible to invoke the API using "Invoke-NaSystemApi" but I checked the ZAPI and noticed this also fails using ZExplore from the SDK:
ZAPI Request:
<?xml version="1.0" encoding="UTF-8"?>
<netapp xmlns="http://www.netapp.com/filer/admin" version="1.21">
<options-set>
<name>timed.servers</name>
<value>192.168.100.10,192.168.100.11,192.168.100.12</value>
</options-set>
</netapp>
ZAPI Results:
<?xml version='1.0' encoding='UTF-8' ?>
<netapp version='1.1' xmlns='http://www.netapp.com/filer/admin'>
<!-- Output of options-set [Execution Time: 8610 ms] -->
<results reason='Unable to set option: timed.servers' errno='13001' status='failed'>
<cluster-constraint>same_preferred</cluster-constraint>
<cluster_constraint>same_preferred</cluster_constraint>
<message>1 entry was deleted.
</message>
</results>
</netapp>
So i think the options are either using the "Set-NaOption" cmdlet with the -SilentlyContinue parameter or the "Invoke-NaSsh" cmdlet with -ErrorAction stop.
As a work around i'd recommend something like:
[String]$servers = "192.168.100.10,192.168.100.11,192.168.100.12"
[String]$command = "options timed.servers $servers"
Try{
Invoke-NaSsh -Command $command -ErrorAction Stop
Write-Host "Executed Command: $command"
}Catch{
Write-Warning -Message $("Failed Executing Command: $command. Error " + $_.Exception.Message)
}
Hope that helps
/matt
If this post resolved your issue, help others by selecting ACCEPT AS SOLUTION or adding a KUDO.
kramanella has accepted the solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ahh, from Matt's observations and my own experiments, this looks like a bug in the zapi.
The first time I try setting multiple time servers, the zapi reports an error but sets it correctly none-the-less. If I repeat the same zapi call one more time, the call returns success. Same behavior is repeated when using the PSTK cmdlets as well - since they internally call the zapi.
Another alternate (to Matt's) workaround is to run the Set-NaOption with ErrorAction set as 'SilentlyContinue' and then use the Get-NaOption to check if timeserver was set correctly. If not set correctly, the script should throw an error.
