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
$userDN = (Get-ADUser -Identity username -Properties DistinguishedName).DistinguishedName
$user = [ADSI]"LDAP://$userDN"
# Get Property Value
$user.InvokeGet('ConnectClientDrivesAtLogon')
...
# Set Property Value
$user.InvokeSet('ConnectClientDrivesAtLogon',0)
$user.CommitChanges()
автоматическое дописывание при создании сообщения
зачем например писать так dotnet new mvc --no-https --output PartyInvites --framework net6.0
set /a
не следует без необходимости и понимания заключать имена переменных в знаки процента, так как в этом случае их значения будут подставлены до выполнения составной команды, что приведёт к ошибкам, например, в цикле.set /a "sum = (x + x) * c * x"
set /a sum = "(x + x) * c * x"
6a - По поводу HTML сущностей. Хотя в приведённом примере нет ни одного символа, который бы требовал перекодирования в HTML-сущности, тем не менее, при выводе любого текста в HTML, эти сущности действительно должны быть перекодированы в обязательном порядке, всегда, в 100% случаев. Причем с помощью не какой-то левой addslashes, а функции, которая действительно это делает, htmlspecialchars($var_zametka)
echo json_encode($var_zametka)
Add-Computer -DomainName Domain02 -OUPath "OU=testOU,DC=domain,DC=Domain,DC=com"