मैं इसे अंततः स्टैक ओवरफ्लो का सही तरीके से उपयोग करने के तरीके के रूप में उपयोग कर रहा हूं!

मैं एक बड़ी लिपि के हिस्से के रूप में निम्न पंक्ति चलाने की कोशिश कर रहा हूं:

Install-WindowsFeature Web-Server -IncludeManagementTools

जो स्पष्ट रूप से स्वयं पर काम करता है, लेकिन तब नहीं जब मैं एक चर के हिस्से के रूप में "-IncludeManagementTools" को आजमाकर पास करता हूं।

मैं टेक्स्ट फ़ाइल के हिस्से के रूप में स्थापित करने के लिए सुविधाओं की सूची में पढ़ रहा हूं, और इनमें से कुछ में -IncludeManagementTools जैसे विकल्प पैरामीटर हैं। पहले भाग "वेब-सर्वर" को पास करना ठीक काम करता है, दूसरे भाग को पास करना, जब तक कि सीधे कंसोल में टाइप नहीं किया जाता है, अर्थात

    $var="Web-Server"        
    Install-WindowsFeature $var -IncludeManagementTools

पूर्ण वर्तमान कोड नीचे है; मैंने चर के साथ-साथ नीचे क्या है, और लूप के बजाय स्विच स्टेटमेंट का उपयोग करने की कोशिश की है, लेकिन वैकल्पिक पैरामीटर को हमेशा स्थापित करने के लिए सुविधा के नाम के रूप में गलत व्याख्या की जाती है:

    $currentline = "Web-Server -IncludeManagementTools"
    Install-WindowsFeature $currentline.Split(" ")[0]

काम करता है, लेकिन

    $currentline = "Web-Server -IncludeManagementTools"
    Install-WindowsFeature $currentline.Split(" ")[0] $currentline.split(" ")[1]

विफल रहता है। किसी भी मदद की बहुत सराहना की!

पूरा कोड:

Param(
    [Parameter(Mandatory=$true,Position=1)]
    [string]$ConfigFilePath
)

$featurelist = Import-Csv $ConfigFilePath

# Install requested features
$featurelist | % {
    # The install commands have some optional switches which could be in the input file
    # to avoid an error reading in the Install-* commands, split on " " and feed into the command as seperate strings
    If ( $_.feature -contains " " ) {
        If ( $_.feature -eq "-IncludeManagementTools") {Install-WindowsFeature -Name "($_.feature.Split(" ")[0]) -IncludeManagementTools"}
        Else {}
        If ( $_.feature -eq "-IncludeAllSubFeature") { Install-WindowsFeature -Name "($_.feature.Split(" ")[0]) -IncludeAllSubfeature" }
        Else {}
        }
    Else {
        Install-WindowsFeature -Name $_.feature
    }
}

$installed = @()

# Check installs work
$featurelist | % {
    # The install commands have some optional switches which could be in the input file
    # to avoid an error reading in the Get-* commands, remove anything that comes after a space (ie effectively removing optional switches)
    $installed += Get-WindowsFeature -Name $_.feature.Split(" ")[0]
    }

$missing = $installed | ? { $_.Installed -eq $false }

If (!($missing)) {
    Write-Host "All requested features installed ok." -ForegroundColor Green -BackgroundColor Black
}
Else {
    Write-Host "Some features requested weren't installed.  They will be outputted below." -ForegroundColor Black -BackgroundColor Red
    $missing
}
1
Ian Manning 7 सितंबर 2018, 19:01

2 जवाब

सबसे बढ़िया उत्तर

चलने के बाद

Install-WindowsFeature Web-Server -IncludeManagementTools

निम्नलिखित चलाएँ

Get-WindowsFeature

यह सभी विंडोज़ सुविधाओं को स्थापित दिखाना चाहिए। 'प्रबंधन उपकरण शामिल करें' स्विच में जो कुछ भी शामिल है वह टूट गया है और इसकी अपनी विशेषता नाम है। तो सब कुछ 'इंस्टॉल-विंडोज फीचर -नाम xxx' के साथ स्थापित किया जा सकता है

1
4c74356b41 26 जिंदा 2019, 15:20

यह एक सीधा जवाब नहीं है, यह बदलने के लिए एक सिफारिश है कि आपने अपने सेटअप को किसी ऐसी चीज़ के लिए कैसे संरचित किया है जो अधिक स्पष्ट और अधिक रखरखाव योग्य है।

मुझे ऐसा लगता है कि आपको स्प्लैटिंग। यह आपको एक कमांड के लिए मापदंडों को रखने के लिए हैशटेबल का उपयोग करने देता है, जो गतिशील मापदंडों को थोड़ा आसान बना सकता है।

$WindowsFeatureParameters = @{
    Name = 'Web-Server'
    IncludeManagementTools = $true
}
Install-WindowsFeature @WindowsFeatureParameters

मैं प्रत्येक पैरामीटर के लिए एक अलग कॉलम रखने के लिए आपकी सीएसवी फ़ाइल भी बदलूंगा। कुछ इस तरह की कल्पना करें:

FeatureName,IncludeManagementTools,IncludeAllSubFeature
Web-Server,Yes,No

अब आप निर्दिष्ट कर सकते हैं:

$FeatureList = Import-Csv $ConfigFilePath 
foreach ($Feature in $FeatureList) {
    $WindowsFeatureParameters = @{
        Name = 'Web-Server'
        IncludeManagementTools = ($Feature.IncludeManagementTools -eq 'Yes')
        IncludeAllSubFeature= ($Feature.IncludeAllSubFeature -eq 'Yes')
    }
    Install-WindowsFeature @WindowsFeatureParameters
}

$Installed = foreach ($Feature in $FeatureList) {
    Get-WindowsFeature -Name $Feature.FeatureName
}

$Missing = $Installed | Where-Object Installed -eq $false

वैकल्पिक रूप से, आप इसके मान को नियंत्रित करने के लिए एक स्विच के साथ एक चर निर्दिष्ट कर सकते हैं:

# Install with management tools
$ManagementTools = $true
Install-WindowsFeature 'Web-Server' -IncludeManagementTools:$ManagementTools

# Install without management tools
$ManagementTools = $false
Install-WindowsFeature 'Web-Server' -IncludeManagementTools:$ManagementTools

जाहिर है, $ManagementTools किसी भी बूलियन परीक्षण द्वारा निर्धारित किया जा सकता है।

0
Bacon Bits 7 सितंबर 2018, 19:17