diff --git a/library/windows/win_feature.ps1 b/library/windows/win_feature.ps1 new file mode 100644 index 0000000000..d5d629a13d --- /dev/null +++ b/library/windows/win_feature.ps1 @@ -0,0 +1,77 @@ +#!powershell +# This file is part of Ansible. +# +# Copyright 2014, Paul Durivage +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +# WANT_JSON +# POWERSHELL_COMMON + +Import-Module Servermanager; + +$params = Parse-Args $args; + +$result = New-Object psobject @{ + win_feature = New-Object psobject + changed = $false +} + +If ($params.name) { + $name = $params.name +} +Else { + Fail-Json $result "mising required argument: name" +} + +If ($params.state) { + $state = $params.state.ToString().ToLower() + If (!($state -eq 'present') -or ($state -eq 'absent')) { + Fail-Json $result "state must be 'present' or 'absent'" + } +} + +If ($state -eq "present") { + try { + $result = Add-WindowsFeature -Name $name + } + catch { + Fail-Json $_.Exception.Message + } +} +Elseif ($state -eq "absent") { + try { + $result = Remove-WindowsFeature -Name $name + } + catch { + Fail-Json $_.Exception.Message + } +} + +$feature_results = @() +ForEach ($item in $result.FeatureResult) { + $feature_results += New-Object psobject @{ + id = $item.id.ToString() + message = $item.Message.ToString() + restart_needed = $item.RestartNeeded.ToString() + skip_reason = $item.SkipReason.ToString() + success = $item.Success + } +} +Set-Attr $result.win_feature "feature_result" $feature_results +Set-Attr $result.win_feature "success" result.Success +Set-Attr $result.win_feature "exitcode" result.ExitCode.ToString() +Set-Attr $result.win_feature "restart_needed" result.RestartNeeded.ToString() + +Exit-Json $result;