This commit is contained in:
parent
2a27176d7c
commit
d2094cd611
2 changed files with 55 additions and 43 deletions
|
@ -42,15 +42,34 @@ $includesubfeatures = Get-Attr $params "include_sub_features" $false | ConvertTo
|
|||
$includemanagementtools = Get-Attr $params "include_management_tools" $false | ConvertTo-Bool
|
||||
$source = Get-Attr $params "source" $false
|
||||
|
||||
If ($state -eq "present") {
|
||||
if ($source)
|
||||
{
|
||||
if (!(test-path $source))
|
||||
{
|
||||
Fail-Json $result "Failed to find source path $source"
|
||||
}
|
||||
}
|
||||
# Determine which cmdlets we need to work with. Then we can set options appropriate for the cmdlet
|
||||
$installWF= $false
|
||||
$addWF = $false
|
||||
|
||||
try {
|
||||
# We can infer uninstall/remove if install/add cmdlets exist
|
||||
if (Get-Command "Install-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
$addCmdlet = "Install-WindowsFeature"
|
||||
$removeCmdlet = "Uninstall-WindowsFeature"
|
||||
$installWF = $true
|
||||
}
|
||||
elseif (Get-Command "Add-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
$addCmdlet = "Add-WindowsFeature"
|
||||
$removeCmdlet = "Remove-WindowsFeature"
|
||||
$addWF = $true
|
||||
}
|
||||
else {
|
||||
throw [System.Exception] "Not supported on this version of Windows"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Fail-Json $result $_.Exception.Message
|
||||
}
|
||||
|
||||
|
||||
If ($state -eq "present") {
|
||||
|
||||
# Base params to cover both Add/Install-WindowsFeature
|
||||
$InstallParams = @{
|
||||
"Name"=$name;
|
||||
"Restart"=$Restart;
|
||||
|
@ -58,48 +77,39 @@ If ($state -eq "present") {
|
|||
"ErrorAction"="SilentlyContinue"
|
||||
}
|
||||
|
||||
if ($IncludeManagementTools -eq $true)
|
||||
{
|
||||
$InstallParams.add("IncludeManagementTools",$includemanagementtools)
|
||||
# IncludeManagementTools and source are options only for Install-WindowsFeature
|
||||
if ($installWF) {
|
||||
|
||||
if ($source) {
|
||||
if (!(test-path $source)) {
|
||||
Fail-Json $result "Failed to find source path $source"
|
||||
}
|
||||
|
||||
$InstallParams.add("Source",$source)
|
||||
}
|
||||
|
||||
if ($IncludeManagementTools) {
|
||||
$InstallParams.add("IncludeManagementTools",$includemanagementtools)
|
||||
}
|
||||
}
|
||||
|
||||
if ($source)
|
||||
{
|
||||
$InstallParams.add("Source",$source)
|
||||
}
|
||||
|
||||
|
||||
|
||||
try {
|
||||
If (Get-Command "Install-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
$featureresult = Install-WindowsFeature @InstallParams
|
||||
}
|
||||
ElseIf (Get-Command "Add-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
if ($IncludeManagementTools)
|
||||
{
|
||||
$InstallParams.Remove("IncludeManagementTools")
|
||||
}
|
||||
$featureresult = Add-WindowsFeature @InstallParams
|
||||
}
|
||||
Else {
|
||||
Fail-Json $result "Not supported on this version of Windows"
|
||||
}
|
||||
$featureresult = Invoke-Expression "$addCmdlet @InstallParams"
|
||||
}
|
||||
catch {
|
||||
Fail-Json $result $_.Exception.Message
|
||||
}
|
||||
}
|
||||
ElseIf ($state -eq "absent") {
|
||||
|
||||
$UninstallParams = @{
|
||||
"Name"=$name;
|
||||
"Restart"=$Restart;
|
||||
"ErrorAction"="SilentlyContinue"
|
||||
}
|
||||
|
||||
try {
|
||||
If (Get-Command "Uninstall-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
$featureresult = Uninstall-WindowsFeature -Name $name -Restart:$restart -ErrorAction SilentlyContinue
|
||||
}
|
||||
ElseIf (Get-Command "Remove-WindowsFeature" -ErrorAction SilentlyContinue) {
|
||||
$featureresult = Remove-WindowsFeature -Name $name -Restart:$restart -ErrorAction SilentlyContinue
|
||||
}
|
||||
Else {
|
||||
Fail-Json $result "Not supported on this version of Windows"
|
||||
}
|
||||
$featureresult = Invoke-Expression "$removeCmdlet @UninstallParams"
|
||||
}
|
||||
catch {
|
||||
Fail-Json $result $_.Exception.Message
|
||||
|
|
|
@ -31,7 +31,7 @@ module: win_feature
|
|||
version_added: "1.7"
|
||||
short_description: Installs and uninstalls Windows Features on Windows Server
|
||||
description:
|
||||
- Installs or uninstalls Windows Roles or Features on Windows Server. This module uses the Add/Remove-WindowsFeature Cmdlets, which is not available on client os machines.
|
||||
- Installs or uninstalls Windows Roles or Features on Windows Server. This module uses the Add/Remove-WindowsFeature Cmdlets on Windows 2008 and Install/Uninstall-WindowsFeature Cmdlets on Windows 2012, which are not available on client os machines.
|
||||
options:
|
||||
name:
|
||||
description:
|
||||
|
@ -64,7 +64,8 @@ options:
|
|||
required: false
|
||||
include_management_tools:
|
||||
description:
|
||||
- Adds the corresponding management tools to the specified feature
|
||||
- Adds the corresponding management tools to the specified feature.
|
||||
- Not supported in Windows 2008. If present when using Windows 2008 this option will be ignored.
|
||||
choices:
|
||||
- yes
|
||||
- no
|
||||
|
@ -72,7 +73,8 @@ options:
|
|||
required: false
|
||||
source:
|
||||
description:
|
||||
- Specify a source to install the feature from
|
||||
- Specify a source to install the feature from.
|
||||
- Not supported in Windows 2008. If present when using Windows 2008 this option will be ignored.
|
||||
required: false
|
||||
choices: [ ' {driveletter}:\sources\sxs', ' {IP}\Share\sources\sxs' ]
|
||||
version_added: "2.1"
|
||||
|
|
Loading…
Reference in a new issue