PowerShell
- 18 ответов
 - 0 вопросов
 
    9
    Вклад в тег
    
      
      
    
  
  
function Get-ResultFilePath {
    param (
        # Путь к файлу, который копируется
        [Parameter(Mandatory = $true)]
        [System.String]
        $SourcePath,
        # Путь к папке, в которую необходимо скопировать файл
        [Parameter(Mandatory = $true)]
        [System.String]
        $DestinationFolder
    )
    # Вариант 1
    $File = Get-Item -Path $SourcePath
    $DestinationPath = Join-Path -Path $DestinationFolder -ChildPath "$($File.BaseName)$($File.Extension)"
    $i = 1
    While (Test-Path -Path $DestinationPath) {
        $DestinationPath = Join-Path -Path $DestFolder -ChildPath ($File.BaseName, $File.Extension -join "($i)")
        $i++
    }
    # Вариант 2
    # $FileBaseName = [System.IO.Path]::GetFileNameWithoutExtension($SourcePath)
    # $FileExtension = [System.IO.Path]::GetExtension($SourcePath)
    # $DestinationPath = Join-Path -Path $DestinationFolder -ChildPath "$FileBaseName$FileExtension"
    # $i = 1
    # While (Test-Path -Path $DestinationPath) {
    #     $DestinationPath = Join-Path -Path $DestFolder -ChildPath ($FileBaseName, $FileExtension -join "($i)")
    #     $i++
    # }
    return $DestinationPath
}
$DestFolder = 'F:\tmp'
$Path = 'C:\tmp\FileName.pdf'
Copy-Item -Path $Path -Destination (Get-ResultFilePath -SourcePath $Path -DestinationFolder $DestFolder)      Get-ADComputer -Filter 'OperatingSystem -notlike "*Server*"' | ForEach-Object -Process {
    if (Test-NetConnection -ComputerName $PSItem.DnsHostName -InformationLevel Quiet) {
        Write-Host $PSItem.Name 'доступен' -ForegroundColor Green
    }
    else {
        Write-Host $PSItem.Name 'НЕдоступен' -ForegroundColor Yellow
    }
}# Установка
$InstalledPackage = Get-Package -Name '1*:Предприятие 8*' -RequiredVersion $PlatformVersion -ErrorAction SilentlyContinue
if ($InstalledPackage) {
    ##TODO Уже установлена
}
else {
    ##TODO Вывод в лог 'Запускаем установку версии' $PlatformVersion
    Start-Process -FilePath 'C:\windows\system32\msiexec.exe' -ArgumentList $ArgumentsArray -Wait
    ##TODO Вывод в лог 'Установили версию' $PlatformVersion -ForegroundColor Green
    ##TODO В try/catch завернуть?
}
# Удаляем старые
$InstalledPackages = Get-Package -Name '1*:Предприятие 8*' -ErrorAction SilentlyContinue
foreach ($Package in $InstalledPackages) {
    ##TODO Вывод в лог 'Проверяем версию' $Package.Version
    if ($Package.Version -notin $AllSupportedPlatforms) {
        ##TODO Вывод в лог 'Удаляем версию' $Package.Version
        Uninstall-Package -Name $Package.Name -RequiredVersion $Package.Version -Force
    }
}Get-ADComputer -Filter 'Фильтр по вкусу' | ForEach-Object -Process {
    if (Test-NetConnection -ComputerName $PSItem.DnsHostName -InformationLevel Quiet) {
        Write-Host $PSItem.Name 'доступен' -ForegroundColor Green
        # В $ScriptBlock будет установка/проверка наличия/удаление старых версий/etc 1С
        Invoke-Command -ComputerName $PSItem.DNSHostName -ScriptBlock $ScriptBlock
    }
    else {
        Write-Host $PSItem.Name 'НЕдоступен' -ForegroundColor Yellow
    }
}