एक स्क्रिप्ट है कि सॉफ्टवेयर को स्थापित करने से है के अंत में एक फ़ोल्डर को हटाने से

वोट
0

मैं एक स्क्रिप्ट है कि में सर्वर से एक फ़ाइल कॉपी है c:\windows\temp\माइक्रोसॉफ्ट ऑफिस स्थापित करने के लिए। मैं यह पता लगाने की कैसे मैं तो स्थानीय ड्राइव है कि मैं सर्वर से कॉपी कर स्थापित करना था बंद प्रतिलिपि को नष्ट कर सकते हैं करने के लिए कोशिश कर रहा हूँ। मैं उत्सुक हूँ अगर वहाँ यकीन है कि स्थापित फ़ाइलों यह आवश्यकता हो सकती है कि हटाने से पहले पूरा हो गया है बनाने के लिए एक तरीका है।

Function Get-FileName{
[CmdletBinding()]
Param(
    [String]$Filter = |*.*,
    [String]$InitialDirectory = C:\)

    [void][System.Reflection.Assembly]::LoadWithPartialName(System.windows.forms)
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $InitialDirectory
    $OpenFileDialog.filter = $Filter
    [void]$OpenFileDialog.ShowDialog()
    $OpenFileDialog.filename
}

$file = Get-FileName -InitialDirectory $env:USERPROFILE\Desktop -Filter Text files (*.txt)|*.txt|All files (*.*)|*.*
ForEach ($item in (Get-Content $file)) {
    $sitem = $item.Split(|)
    $computer = $sitem[0].Trim()
    $user = $sitem[1].Trim()

    $filepath = Test-Path -Path \\$computer\c$\Program Files (x86)\Microsoft Office\
    If ($filepath -eq $false) {
    Get-Service remoteregistry -ComputerName $computer | Start-Service

    Copy-Item -Path \\server\Install\Office2010 -Destination \\$computer\c$\windows\temp\ -Container -Recurse -Force

    <#
    $InstallString = 'C:\windows\temp\Office2010\setup.exe'
    ([WMICLASS]\\$computer\ROOT\CIMV2:Win32_Process).Create($InstallString)

    $computer + - + $(Get-Date) | Out-File -FilePath \\server\Install\Office2010\RemoteInstallfile.txt -Append
    #>
    } Else {
        $computer + _Already_Had_Software_ + $(Get-Date) | Out-File -FilePath \\server\Install\Office2010\RemoteInstallfile.txt -Append
    }
}

अगर मैं इस कोड में कहीं नीचे टुकड़ा डालने तो आगे जाना है और इस फ़ोल्डर को हटाने के लिए कर सकता है सोच रहा था?

$folderToDelete = \\$computer\c$\windows\temp\

$ErrorActionPreference= 'silentlycontinue'
[io.directory]::delete($folderToDelete, $true)
$fso = New-Object -ComObject scripting.filesystemobject
$fso.DeleteFolder($folderToDelete,$true)
if (Test-Path ($folderToDelete)) {
 New-Item -ItemType directory -Path .\EmptyFolder
 robocopy .\EmptyFolder $folderToDelete /mir
 Remove-Item .\EmptyFolder
 Remove-Item $folderToDelete
}

लेकिन मुझे यकीन है कि अगर नहीं कर रहा हूँ स्थापित करने से पहले हटाने की जगह ले जाएगा पूरा नहीं हो सकता है? क्या कभी किसी ने इस तरह कुछ भी किया है और कुछ मार्गदर्शन साझा करने के लिए चाहते हैं?

03/10/2016 को 15:28
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

आप इस प्रक्रिया को शुरू के बाद से साथ ([WMICLASS]"\\$computer\ROOT\CIMV2:Win32_Process").Create($InstallString)यह एक छोटे कठिन है के साथ तुलना में पीआईडी पारित करने के लिए Start-Process or Invoke-Command। तो जैसे क्रिस एन आप पीआईडी पकड़ें और उसे बंद होने की प्रतीक्षा करना चाहते कहा। लेकिन चूंकि .waitforexit()दूरस्थ मशीन पर समर्थित नहीं है, तो आप इसे दो तरह से करने के लिए मिल जाएगा।

के माध्यम से आह्वान कमान: (जो एक विकल्प के बाद से आप इस का उपयोग नहीं किया पहली जगह में सेटअप आदेश को चलाने के लिए नहीं हो सकता है)

$PID = (Get-Process setup -computername $computer).id
Invoke-Command -ComputerName RemoteComputer -ScriptBlock { param($ProcessId) Wait-Process -ProcessId $ProcessId } -ArgumentList $PID

कुछ समय पाश, जाँच प्रक्रिया पूर्ण कर लिया है:

$processid = (Get-Process setup -computername $computer).id
while ($null -ne $processid) {
    Start-Sleep -m 250
}

इसके अलावा अपने, हिस्से को हटाना अनावश्यक रूप से जटिल लगता है।

$folderToDelete = "\\$computer\c$\example"
if (Test-Path ($folderToDelete)) {
    Remove-Item $folderToDelete -Recurse -Force
}

एक और बात, ErrorActionPreference की स्थापना चुपचाप अपनी स्क्रिप्ट में जारी रखने के लिए आम तौर पर बुरा अभ्यास है। आम तौर पर इस सवाल का जवाब एक उचित ट्राई / कैच के साथ पकड़ने त्रुटि है

03/10/2016 को 16:36
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more