systemctl restart
. У него все телодвижения происходят через врапперы, запускаемые местным питоном (см.).systemd
, а через shell/command
. Тогда точечные правила в судоерс проканают.Я пишу программу на c#, которая должна работать с этим самым PowerShell через стандартные потоки ввода/вывода
powershell -command "Start-Process "slmgr" -ArgumentList "/ipk W269N-WFGWX-YVC9B-4J6C9-T83GX" -Verb RunAs"
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)
Set-ADUser -Identity $ADusername -LogonWorkstations $comparray
$ADusername - пользователь, $comparray - компьютер или набор компьютеровТеперь вывод информации отрабатывает три раза, а имя проверяемого пк спрашивает дваждыпотому что вы добавляете введенное имя компа в набор $ArrComputers, а потом дергаете каждый раз весь $ArrComputers через ForEach, т.е. первый ответ на первый ввод, второй и третий ответы - на второй ввод, т.к. в наборе уже два имени
$ArrComputers = Read-Host("Введите имена компьютеров через запятую")
$computerDrives = Get-WmiObject -Class MSFT_PhysicalDisk -Namespace "root\Microsoft\Windows\Storage" -ComputerName $ArrComputers | Format-Table (или Format-List) prop1,prop2...
$computerOS = get-wmiobject Win32_OperatingSystem -ComputerName $ArrComputers
$Paths = Import-Csv -Path "C:\temp\OldFiles.csv" -Delimiter ';'
$ToMove = "C:\temp\ToMove.csv"
foreach ($Row in $Paths)
{
$Path = $Row.FullName
If ($Path.Substring(0,2) -eq "\\") {$Newpath = ("\\?\D:\11111\To_Move" + $Path.Remove(0,12))}
$Destpath = Split-Path $Newpath -Parent
$Row | Add-Member -NotePropertyName "NewPath" -NotePropertyValue $DestPath
}
$Paths | Export-Csv -Force -Path $ToMove -Encoding UTF8 -Delimiter ";" -NoTypeInformation