เจนเฉเจฃ เจเจ เจธเจพเจฒเจพเจ เจคเฉเจ เจฎเฉเจ เจฏเฉเจจเฉเจตเจฐเจธเจฟเจเฉ เจตเจฟเฉฑเจ เจฎเจพเจเจเฉเจฐเฉเจธเจพเจซเจ เจตเจฟเฉฐเจกเฉเจเจผ 10 เจเจฒเจพ เจฐเจนเฉ 8.1 เจตเจฐเจเจธเจเฉเจธเจผเจจเจพเจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจเจฐ เจฐเจฟเจนเจพ เจนเจพเจเฅค เจ
เจธเจฒ เจตเจฟเฉฑเจ, เจธเจนเจพเจเจคเจพ เจตเจฟเฉฑเจ เจตเจฟเจฆเจฟเจ
เจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฒเจ เจฒเฉเฉเฉเจเจฆเฉ เจธเฉเจซเจเจตเฉเจ
เจฐ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจเจพ เจ
เจคเฉ เจธเจฎเฉเฉฑเจเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃเจพ เจธเจผเจพเจฎเจฒ เจนเฉเฅค
เจนเจฐเฉเจ เจธเจเฉเจธเจผเจจ เจตเจฟเฉฑเจ 2 เจเจชเจญเฉเจเจคเจพ เจนเจจ: เจชเฉเจฐเจธเจผเจพเจธเจ เจ เจคเฉ เจตเจฟเจฆเจฟเจเจฐเจฅเฉเฅค เจชเฉเจฐเจธเจผเจพเจธเจ เจฆเจพ เจชเฉเจฐเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจนเฉ; เจตเจฟเจฆเจฟเจเจฐเจฅเฉ เจเฉเจฒ เจธเฉเจซเจเจตเฉเจ เจฐ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจเจคเจพ เจจเจนเฉเจ เจนเฉเฅค เจตเจฟเจฆเจฟเจเจฐเจฅเฉ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจธเจพเจซเจผ เจเจฐเจจ เจตเจฟเฉฑเจ เจชเจฐเฉเจธเจผเจพเจจเฉ เจจเจพ เจเจฐเจจ เจฒเจ, เจเจธ เจเจพเจคเฉ เจจเฉเฉฐ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจฎเจฟเจเจพ เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ เจ เจคเฉ เจจเจตเฉเจ เจธเจฟเจฐเจฟเจเจ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉเฅค เจเจธ เจตเจฟเฉฑเจ เจเฉเจ เจธเจฐเฉเจฐเจ เจ เฉฐเจฆเฉเจฒเจจ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ เจนเจจ เจเฉ เจนเจฐเฉเจ เจธเจเฉเจธเจผเจจ 'เจคเฉ เจเฉเจคเฉ เจเจพเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค
เจเจธ เจธเจพเจฒ เจฎเฉเจ ActiveDirectory เจคเฉเจ เจฌเจฟเจจเจพเจ PowerShell เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจเจผเจฟเจเจฆเจพเจคเจฐ เจ
เฉฐเจฆเฉเจฒเจจเจพเจ เจจเฉเฉฐ เจธเจตเฉเจเจฒเจฟเจค เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉ เจ
เจคเฉ เจเจธ เจชเฉเจธเจ เจตเจฟเฉฑเจ เจเฉเจ เจชเจเจตเจพเจจเจพเจ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเฉเจคเจพ เจนเฉ เจเฉ เจฎเฉเจจเฉเฉฐ เจเฉฐเจเจฐเจจเฉเฉฑเจ 'เจคเฉ เจฎเจฟเจฒเฉเจเจ เจนเจจเฅค
เจธเจฟเจเจฒเจพเจ
เจฎเฉเจจเฉเฉฐ เจคเฉเจฐเฉฐเจค เจเจธ เจคเฉฑเจฅ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจจเจพ เจชเจฟเจ เจเจฟ PS 4 เจธเจเฉเจธเจผเจจเจพเจ 'เจคเฉ เจธเจฅเจพเจชเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ เจ เจคเฉ เจธเจญ เจคเฉเจ เจเจพเจฃเฉ เจเฉฐเจเจฐเจจเฉเจ เจฆเฉเจเจ เจเฉเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจจเฉ เจเฉฐเจฎ เจจเจนเฉเจ เจเฉเจคเจพ. เจเจธ เจฒเจ, เจจเจคเฉเจเฉ เจตเจเฉเจ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเจ เจเจพเจฐเจตเจพเจเจเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ:
- เจเฉฐเจธเจเจพเจฒ เจเจฐเจจ เจฒเจ
เจตเจฟเฉฐเจกเฉเจเจผ เจฎเฉเจจเฉเจเจฎเฉเจเจ เจซเจฐเฉเจฎเจตเจฐเจ 5.1 - เจจเจตเฉเจจเจคเจฎ เจธเฉฐเจธเจเจฐเจฃ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ
เจชเจพเจตเจฐเจธเจผเฉเจฒ
เจธเจตเฉเจเจฒเจฟเจค เจเจพเจฐเจตเจพเจเจเจ
- เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจเจพเจคเจพ เจฎเจฟเจเจพเจเจฃเจพ / เจฌเจฃเจพเจเจฃเจพ
- เจเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค เจเจชเจญเฉเจเจคเจพ เจฒเจ เจเจเฉ เจฒเฉเจเจเจจ
- เจเจฆเฉเจ เจเจชเจญเฉเจเจคเจพ เจชเจนเจฟเจฒเฉ เจตเจพเจฐ เจฒเฉเจเจเจจ เจเจฐเจฆเจพ เจนเฉ เจคเจพเจ เจธเจเฉเจฐเจฟเจชเจ เจเจฒเจพเจ
เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจเจพเจคเจพ เจฎเจฟเจเจพเจเจฃเจพ / เจฌเจฃเจพเจเจฃเจพ
เจฎเฉเจ เจฐเจเจจเจพ เจจเจพเจฒ เจธเจผเฉเจฐเฉเจเจค เจเฉเจคเฉเฅค เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจคเฉเจนเจพเจจเฉเฉฐ 2 เจเจฆเจฎ เจเฉเฉฑเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ: เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจฌเจฃเจพเจ (
Function New-User {
<#
.SYNOPSIS
ะกะพะทะดะฐะฝะธะต ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัะพะทะดะฐะตั ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะดะพะฑะฐะฒะปัะตั ะตะณะพ ะฒ ะณััะฟะฟั ะะพะปัะทะพะฒะฐัะตะปะธ
.EXAMPLE
#New-User "Student" "Student"
.PARAMETER Name
ะะผั ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Password
ะะฐัะพะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Name,
[PARAMETER(Mandatory=$True)][String]$Password
)
$Pwd = convertto-securestring $Password -asplaintext -force
$GroupSID = "S-1-5-32-545"
New-LocalUser -User $Name -AccountNeverExpires:$true -FullName $Name -Password $Pwd -PasswordNeverExpires:$true
Add-LocalGroupMember -SID $GroupSID -Member $Name
Write-Host "-- ะกะพะทะดะฐะฝ ะฟะพะปัะทะพะฒะฐัะตะปั $Name ั ะฟะฐัะพะปะตะผ $Password" -foregroundcolor Green
}
เจฎเฉเจ เจเจธเจจเฉเฉฐ SID เจฆเฉเจเจฐเจพ เจธเจฎเฉเจน เจตเจฟเฉฑเจ เจเฉเฉเจฆเจพ เจนเจพเจ, เจเจฟเจเจเจเจฟ เจเฉฑเจ เจฒเฉเจ เจตเจฟเฉฑเจ เจฎเฉเจ เจชเจพเจเจ เจเจฟ เจเจชเจญเฉเจเจคเจพ เจธเจฎเฉเจน เจฆเจพ SID เจนเจฐ เจเจเฉเจนเจพ เจเฉฑเจเฉ เจเจฟเจนเจพ เจนเฉ - S-1-5-32-545.
เจฎเจฟเจเจพเจเจฃ เจจเฉเฉฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจธเจฟเจงเจพเจเจค เจฆเฉ เจ เจจเฉเจธเจพเจฐ เจธเฉฐเจเจ เจฟเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ: เจชเฉเจฐเจธเจผเจพเจธเจ เจฆเฉเจเจฐเจพ เจฌเจฃเจพเจ เจเจ เจธเจพเจฐเฉ เจเจพเจคเจฟเจเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, Win32_UserProfile เจเจฒเจพเจธ เจฆเฉ WMI เจเจฌเจเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจฎเฉเจ เจเจนเจจเจพเจ เจธเจพเจฐเฉ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจฆเจพ เจนเจพเจ เจเฉ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจเจฟเจฐเจฟเจเจธเจผเฉเจฒ เจจเจนเฉเจ เจนเจจ เจ เจคเฉ เจตเจฟเจธเจผเฉเจธเจผ เจจเจนเฉเจ เจนเจจ.
Function Remove-Users {
<#
.SYNOPSIS
ะฃะดะฐะปะตะฝะธะต ะฟะพะปัะทะพะฒะฐัะตะปะตะน
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัะดะฐะปัะตั ะฟะพะปัะทะพะฒะฐัะตะปะตะน, ะบะพัะพััะต ัะตะนัะฐั ะฝะต ะฐะบัะธะฒะฝั ะธ ะฝะต ัะฒะปััััั ัะฟะตัะธะฐะปัะฝัะผะธ
ะฃะดะฐะปััััั ะฒ ัะพะผ ัะธัะปะต ัะฐะฑะพัะธะน ะบะฐัะฐะปะพะณ ะธ ัะตะตััั ะฟะพะปัะทะพะฒะฐัะตะปะตะน
.EXAMPLE
#Remove-Users
#>
[CmdletBinding()]
$UsersProfiles = Get-WMIObject -class Win32_UserProfile -ComputerName $env:COMPUTERNAME | Where {!($_.Loaded) -and !($_.Special)}
foreach($Usr in $UsersProfiles) {
$UsrName = $Usr.LocalPath.Split("")[2]
Write-Host "-- ะฃะดะฐะปะตะฝะธะต ะฟะพะปัะทะพะฒะฐัะตะปั $UsrName ..." -foregroundcolor Green
Remove-LocalUser -Name $UsrName
Remove-WmiObject -Path $Usr.__PATH
Write-Host "-- ะะพะปัะทะพะฒะฐัะตะปั $UsrName ัะดะฐะปะตะฝ" -foregroundcolor Green
}
}
เจเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค เจเจชเจญเฉเจเจคเจพ เจฆเจพ เจเจเฉเจฒเฉเจเจฟเจจ (เจเจเฉเจฒเฉเจเจฟเจจ)
เจเฉฑเจฅเฉ เจธเจญ เจเฉเจ HKEY_LOCAL_MACHINE เจฐเจเจฟเจธเจเจฐเฉ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจคเฉฑเจ เจธเฉเจฎเจฟเจค เจธเฉเฅค เจเจนเจจเจพเจ เจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจเฉเจเฉ เจซเฉฐเจเจธเจผเจจ เจตเจฟเฉฑเจ เจตเฉ เจเฉเฉเจฟเจ เจเจฟเจ เจธเฉ:
Function Set-AutoLogon {
<#
.SYNOPSIS
ะะบะปััะตะฝะธะต ะฐะฒัะพะฒั
ะพะดะฐ ะดะปั ะฟะพะปัะทะพะฒะฐัะตะปั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะฒะบะปััะฐะตั ะฐะฒัะพะฒั
ะพะด ะดะปั ัะบะฐะทะฐะฝะฝะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-AutoLogon "Student" "Student"
.PARAMETER Name
ะะผั ะฟะพะปัะทะพะฒะฐัะตะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Password
ะะฐัะพะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Name,
[PARAMETER(Mandatory=$True)][String]$Password
)
$PathToWinlogon = "HKLM:SoftwareMicrosoftWindows NTCurrentVersionWinlogon"
New-ItemProperty -Path $PathToWinlogon -Name AutoAdminLogon -Value 1 -PropertyType "String"
New-ItemProperty -Path $PathToWinlogon -Name DefaultUserName -Value $Name -PropertyType "String"
New-ItemProperty -Path $PathToWinlogon -Name DefaultPassword -Value $Password -PropertyType "String"
}
เจเจฆเฉเจ เจเจชเจญเฉเจเจคเจพ เจชเจนเจฟเจฒเฉ เจตเจพเจฐ เจฒเฉเจเจเจจ เจเจฐเจฆเจพ เจนเฉ เจคเจพเจ เจธเจเฉเจฐเจฟเจชเจ เจเจฒเจพเจ
เจเจน เจชเจคเจพ เจเจฒเจฟเจ เจเจฟ เจจเจตเฉเจ เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจชเจนเจฟเจฒเฉ เจฒเฉเจเจเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเจฐ เจเฉเจเจผ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ (เจเฉ เจเจฟ เจฎเฉเจฐเฉ เจฒเจ เจเฉเจ เจนเฉเจฐเจพเจจเฉเจเจจเจ เจธเฉ). เจเจธ เจฒเจ, เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจเจฒเจพเจเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจธเฉ เจเฉ เจชเจนเจฟเจฒเฉ เจฒเฉเจเจเจจ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉเจ เจเจพเจฐเจตเจพเจเจเจ เจเจฐเจฆเฉ เจนเฉ:
- เจเฉฑเจ เจชเฉเจฐเฉเจเจธเฉ เจธเจฅเจพเจชเจค เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเฉ
- เจกเฉเจธเจเจเจพเจช เจเฉฑเจคเฉ เจซเจพเจเจฒเจพเจ เจฆเฉ เจฐเจเจจเจพ เจจเฉเฉฐ เจฐเฉเจเจฃเจพ
- เจเจชเจญเฉเจเจคเจพ เจเฉฐเจเจฐเฉเจฒ เจชเฉเจจเจฒ เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒเจฟเจค เจเจฐเจจเจพ
เจฎเฉเจ เจเจ เจคเจฐเฉเจเจฟเจเจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเฉเจคเฉ, เจชเจฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเฉฑเจ เจจเฉ เจฎเฉเจฐเฉ เจฒเจ เจเฉฐเจฎ เจเฉเจคเจพ: เจเฉฑเจ เจเจพเจฐเจ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ. เจชเจฐ เจฎเฉเจ PS เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจ เจเฉฐเจฎ เจธเจผเฉเจฐเฉ เจจเจนเฉเจ เจเจฐ เจธเจเจฟเจเฅค เจเจธ เจฒเจ เจฎเฉเจ เจฒเฉฐเจฎเจพ เจฐเจธเจคเจพ เจฒเจฟเจ:
schtasks /create /tn LogonUserSettings /tr "pwsh C:ScriptsSettings.ps1" /sc onlogon /ru $env:USERDOMAIN$UserName /rp $Password /f
เจชเจฐ เจเจน เจเจพเจซเจผเฉ เจจเจนเฉเจ เจธเฉ - เจตเจฟเฉฐเจกเฉเจเจผ เจจเฉ เจฌเฉเจ เจเฉเจฌ (SeBatchLogonRight) เจตเจเฉเจ เจฒเฉเจเจเจจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเฉเจฃ เจฒเจ เจเจฟเจนเจพ. เจเจธ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจเจฐเจจเจพ เจนเฉ เจฆเฉ เจธเจตเจพเจฒ เจฆเฉ เจเจตเจพเจฌ เจฆเฉ เจเฉเจ เจจเฉ เจเจธ เจตเฉฑเจฒ เจ
เจเจตเจพเจ เจเฉเจคเฉ
LsaWrapper
$Source = @'
using System;
using System.Collections.Generic;
using System.Text;
namespace MyLsaWrapper
{
using System.Runtime.InteropServices;
using System.Security;
using System.Management;
using System.Runtime.CompilerServices;
using System.ComponentModel;
using LSA_HANDLE = IntPtr;
[StructLayout(LayoutKind.Sequential)]
struct LSA_OBJECT_ATTRIBUTES
{
internal int Length;
internal IntPtr RootDirectory;
internal IntPtr ObjectName;
internal int Attributes;
internal IntPtr SecurityDescriptor;
internal IntPtr SecurityQualityOfService;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct LSA_UNICODE_STRING
{
internal ushort Length;
internal ushort MaximumLength;
[MarshalAs(UnmanagedType.LPWStr)]
internal string Buffer;
}
sealed class Win32Sec
{
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern uint LsaOpenPolicy(
LSA_UNICODE_STRING[] SystemName,
ref LSA_OBJECT_ATTRIBUTES ObjectAttributes,
int AccessMask,
out IntPtr PolicyHandle
);
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern uint LsaAddAccountRights(
LSA_HANDLE PolicyHandle,
IntPtr pSID,
LSA_UNICODE_STRING[] UserRights,
int CountOfRights
);
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern int LsaLookupNames2(
LSA_HANDLE PolicyHandle,
uint Flags,
uint Count,
LSA_UNICODE_STRING[] Names,
ref IntPtr ReferencedDomains,
ref IntPtr Sids
);
[DllImport("advapi32")]
internal static extern int LsaNtStatusToWinError(int NTSTATUS);
[DllImport("advapi32")]
internal static extern int LsaClose(IntPtr PolicyHandle);
[DllImport("advapi32")]
internal static extern int LsaFreeMemory(IntPtr Buffer);
}
/// <summary>
/// This class is used to grant "Log on as a service", "Log on as a batchjob", "Log on localy" etc.
/// to a user.
/// </summary>
public sealed class LsaWrapper : IDisposable
{
[StructLayout(LayoutKind.Sequential)]
struct LSA_TRUST_INFORMATION
{
internal LSA_UNICODE_STRING Name;
internal IntPtr Sid;
}
[StructLayout(LayoutKind.Sequential)]
struct LSA_TRANSLATED_SID2
{
internal SidNameUse Use;
internal IntPtr Sid;
internal int DomainIndex;
uint Flags;
}
[StructLayout(LayoutKind.Sequential)]
struct LSA_REFERENCED_DOMAIN_LIST
{
internal uint Entries;
internal LSA_TRUST_INFORMATION Domains;
}
enum SidNameUse : int
{
User = 1,
Group = 2,
Domain = 3,
Alias = 4,
KnownGroup = 5,
DeletedAccount = 6,
Invalid = 7,
Unknown = 8,
Computer = 9
}
enum Access : int
{
POLICY_READ = 0x20006,
POLICY_ALL_ACCESS = 0x00F0FFF,
POLICY_EXECUTE = 0X20801,
POLICY_WRITE = 0X207F8
}
const uint STATUS_ACCESS_DENIED = 0xc0000022;
const uint STATUS_INSUFFICIENT_RESOURCES = 0xc000009a;
const uint STATUS_NO_MEMORY = 0xc0000017;
IntPtr lsaHandle;
public LsaWrapper()
: this(null)
{ }
// // local system if systemName is null
public LsaWrapper(string systemName)
{
LSA_OBJECT_ATTRIBUTES lsaAttr;
lsaAttr.RootDirectory = IntPtr.Zero;
lsaAttr.ObjectName = IntPtr.Zero;
lsaAttr.Attributes = 0;
lsaAttr.SecurityDescriptor = IntPtr.Zero;
lsaAttr.SecurityQualityOfService = IntPtr.Zero;
lsaAttr.Length = Marshal.SizeOf(typeof(LSA_OBJECT_ATTRIBUTES));
lsaHandle = IntPtr.Zero;
LSA_UNICODE_STRING[] system = null;
if (systemName != null)
{
system = new LSA_UNICODE_STRING[1];
system[0] = InitLsaString(systemName);
}
uint ret = Win32Sec.LsaOpenPolicy(system, ref lsaAttr,
(int)Access.POLICY_ALL_ACCESS, out lsaHandle);
if (ret == 0)
return;
if (ret == STATUS_ACCESS_DENIED)
{
throw new UnauthorizedAccessException();
}
if ((ret == STATUS_INSUFFICIENT_RESOURCES) || (ret == STATUS_NO_MEMORY))
{
throw new OutOfMemoryException();
}
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError((int)ret));
}
public void AddPrivileges(string account, string privilege)
{
IntPtr pSid = GetSIDInformation(account);
LSA_UNICODE_STRING[] privileges = new LSA_UNICODE_STRING[1];
privileges[0] = InitLsaString(privilege);
uint ret = Win32Sec.LsaAddAccountRights(lsaHandle, pSid, privileges, 1);
if (ret == 0)
return;
if (ret == STATUS_ACCESS_DENIED)
{
throw new UnauthorizedAccessException();
}
if ((ret == STATUS_INSUFFICIENT_RESOURCES) || (ret == STATUS_NO_MEMORY))
{
throw new OutOfMemoryException();
}
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError((int)ret));
}
public void Dispose()
{
if (lsaHandle != IntPtr.Zero)
{
Win32Sec.LsaClose(lsaHandle);
lsaHandle = IntPtr.Zero;
}
GC.SuppressFinalize(this);
}
~LsaWrapper()
{
Dispose();
}
// helper functions
IntPtr GetSIDInformation(string account)
{
LSA_UNICODE_STRING[] names = new LSA_UNICODE_STRING[1];
LSA_TRANSLATED_SID2 lts;
IntPtr tsids = IntPtr.Zero;
IntPtr tdom = IntPtr.Zero;
names[0] = InitLsaString(account);
lts.Sid = IntPtr.Zero;
//Console.WriteLine("String account: {0}", names[0].Length);
int ret = Win32Sec.LsaLookupNames2(lsaHandle, 0, 1, names, ref tdom, ref tsids);
if (ret != 0)
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError(ret));
lts = (LSA_TRANSLATED_SID2)Marshal.PtrToStructure(tsids,
typeof(LSA_TRANSLATED_SID2));
Win32Sec.LsaFreeMemory(tsids);
Win32Sec.LsaFreeMemory(tdom);
return lts.Sid;
}
static LSA_UNICODE_STRING InitLsaString(string s)
{
// Unicode strings max. 32KB
if (s.Length > 0x7ffe)
throw new ArgumentException("String too long");
LSA_UNICODE_STRING lus = new LSA_UNICODE_STRING();
lus.Buffer = s;
lus.Length = (ushort)(s.Length * sizeof(char));
lus.MaximumLength = (ushort)(lus.Length + sizeof(char));
return lus;
}
}
public class LsaWrapperCaller
{
public static void AddPrivileges(string account, string privilege)
{
using (LsaWrapper lsaWrapper = new LsaWrapper())
{
lsaWrapper.AddPrivileges(account, privilege);
}
}
}
}
'@
Add-Type -TypeDefinition $Source
[MyLsaWrapper.LsaWrapperCaller]::AddPrivileges($Identity, "SeBatchLogonRight")
เจเฉฑเจ เจฌเฉเจ เจจเฉเจเจฐเฉ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจฒเฉเจเจเจจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเฉเจฃ เจจเจพเจฒ เจธเจพเจจเฉเฉฐ เจนเฉเจฐ เจ เฉฑเจเฉ เจตเจงเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฑเจคเฉ เจเจ เจนเฉ - เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจฒเจฟเจเจฃ เจฒเจ เจเฉ เจเจชเจญเฉเจเจคเจพ เจฆเฉ เจ เจงเฉเจจ เจเจฒเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค
เจเฉฑเจ เจชเฉเจฐเฉเจเจธเฉ เจธเจฅเจพเจชเจค เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเฉ
เจเฉฑเจ เจชเฉเจฐเฉเจเจธเฉ เจธเฉเจ เจ
เจช เจเจฐเจจเจพ เจธเจงเจพเจฐเจจ เจธเจพเจฌเจค เจนเฉเจเจเฅค
Function Set-Proxy {
<#
.SYNOPSIS
ะฃััะฐะฝะพะฒะบะฐ ะฟะฐัะฐะผะตััะพะฒ ะฟัะพะบัะธ
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะทะฐะดะฐะตั ะฟะฐัะฐะผะตััั ะฟัะพะบัะธ ะดะปั ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-Proxy a.cproxy.ru 8080
.PARAMETER Server
ะะดัะตั ะธะปะธ ะดะพะผะตะฝะฝะพะต ะธะผั ัะตัะฒะตัะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Port
ะะพัั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Server,
[PARAMETER(Mandatory=$True)][Int]$Port
)
If ((Test-NetConnection -ComputerName $Server -Port $Port).TcpTestSucceeded) {
Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyServer -Value "$($Server):$($Port)"
Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyEnable -Value 1
} Else {
Write-Error -Message "-- Invalid proxy server address or port: $($Server):$($Port)"
}
}
เจกเฉเจธเจเจเจพเจช เจเฉฑเจคเฉ เจซเจพเจเจฒเจพเจ เจฆเฉ เจฐเจเจจเจพ เจจเฉเฉฐ เจฐเฉเจเจฃเจพ
เจจเฉเฉฑเจเจตเจฐเจ เจจเจพเจฒเฉเจ เจกเฉเจธเจเจเจพเจช 'เจคเฉ เจซเจพเจเจฒเจพเจ เจฌเจฃเจพเจเจฃ 'เจคเฉ เจชเจพเจฌเฉฐเจฆเฉ เจฒเจเจพเจเจฃ เจตเจฟเฉฑเจ เจเจผเจฟเจเจฆเจพ เจธเจฎเจพเจ เจฒเฉฑเจเจพเฅค เจซเฉเจฒเจกเจฐ 'เจคเฉ เจ เจจเฉเจฎเจคเฉเจเจ เจจเฉเฉฐ เจธเฉเฉฑเจ เจเจฐเจจเจพ *เจจเจฟเจเจธ เจธเจฟเจธเจเจฎเจพเจ เจเจฟเฉฐเจจเจพ เจธเฉเจเจพ เจจเจนเฉเจ เจธเฉเฅค เจชเจฐ เจเฉฑเจฅเฉ เจตเฉ เจเจตเจพเจฌ เจธเจจ เจเฉ เจฎเฉเจ เจธเจซเจฒเจคเจพเจชเฉเจฐเจตเจ เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒ เจฌเจฃเจพเจเจ:
Function Set-AccessRule {
<#
.SYNOPSIS
ะฃััะฐะฝะพะฒะบะฐ ะฟัะฐะฒ ะฝะฐ ะฟะฐะฟะบั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัััะฐะฝะฐะฒะปะธะฒะฐะตั ะทะฐะดะฐะฝะฝัะต ะฟัะฐะฒะฐ ะฝะฐ ะดะธัะตะบัะพัะธั
.EXAMPLE
#Set-AccessRule -Folder $env:USERPROFILEDesktop -UserName $env:USERNAME -Rules CreateFiles,AppendData -AccessControlType Deny
.PARAMETER Folder
ะะธัะตะบัะพัะธั, ะฝะฐะด ะบะพัะพัะพะน ะฟัะพะธะทะฒะพะดะธััั ะดะตะนััะฒะธะต (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER UserName
ะะผั ััะตัะฝะพะน ะทะฐะฟะธัะธ ะฟะพะปัะทะพะฒะฐัะตะปั, ะดะปั ะบะพะณะพ ะทะฐะดะฐัััั ะฟัะฐะฒะฐ ะดะพัััะฟะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Rules
ะัะฐะฒะฐ ะดะพัััะฟะฐ ัะตัะตะท ะทะฐะฟัััั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER AccessControlType
ะะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั, ะบะพัะพััะน ะผะพะถะตั ะฟัะธะฝะธะผะฐัั ะพะดะฝะพ ะธะท ะดะฒัั
ะทะฝะฐัะตะฝะธะน: Allow ะธะปะธ Deny
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][Path]$Folder,
[PARAMETER(Mandatory=$True)][String]$UserName,
[PARAMETER(Mandatory=$True)][String]$Rules,
[PARAMETER(Mandatory=$True)][String]$AccessControlType
)
#ััะธััะฒะฐะตะผ ัะตะบััะธะน ัะฟะธัะพะบ ACL ัะฐะฑะพัะตะณะพ ััะพะปะฐ
$acl = Get-Acl $Folder
#ะกะพะทะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั ั ะฝัะถะฝัะผะธ ะฟัะฐะฒะฐะผะธ
$fileSystemRights = [System.Security.AccessControl.FileSystemRights]"$Rules"
#Cะพะทะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั ั ัะบะฐะทะฐะฝะธะตะผ ะฟะพะปัะทะพะฒะฐัะตะปั, ะฟัะฐะฒ ะดะพัััะฟะฐ ะธ ัะธะฟะฐ ัะฐะทัะตัะตะฝะธั
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($UserName, $fileSystemRights, $AccessControlType)
#ะะตัะตะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั ะฒ ะบะปะฐัั FileSystemAccessRule ะดะปั ัะพะทะดะฐะฝะธั ะพะฑัะตะบัะฐ
$acl.SetAccessRule($AccessRule)
#ะัะธะผะตะฝัะตะผ ัะฐะทัะตัะตะฝะธั ะบ ะฟะฐะฟะบะต
$acl | Set-Acl $Folder
}
Set-AccessRule -Folder $env:USERPROFILEDesktop -UserName $env:USERNAME -Rules CreateFiles,AppendData,Delete -AccessControlType Deny
เจ
เจงเจฟเจเจพเจฐเฉ 'เจคเฉ เจซเจพเจเจฒเจธเจฟเจธเจเจฎ เจฐเจพเจเจเจธ เจฆเจพ เจตเฉเจฐเจตเจพ
เจเจชเจญเฉเจเจคเจพ เจเฉฐเจเจฐเฉเจฒ เจชเฉเจจเจฒ เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒเจฟเจค เจเจฐเจจเจพ
เจเจน เจเจผเจฐเฉเจฐเฉ เจจเจนเฉเจ เจธเฉ, เจชเจฐ เจฎเฉเจ เจธเฉเจเจฟเจ เจเจฟ เจตเจฟเจฆเจฟเจเจฐเจฅเฉเจเจ เจจเฉเฉฐ เจ
เจเจธเจฐ เจตเจฐเจคเฉ เจเจพเจฃ เจตเจพเจฒเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจ
เจจเฉเจเฉเจฒเจฟเจค เจกเฉเจธเจผเจฌเฉเจฐเจก เจฆเฉเจฃเจพ เจตเจงเฉเจ เจนเฉเจตเฉเจเจพเฅค เจเจตเจพเจฌ เจฎเจฟเจฒ เจเจฟเจ เจนเฉ
เจชเจฟเฉฐเจจ เจเฉเจคเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ
function Set-PinnedApplication
{
<#
.SYNOPSIS
ะฃะฟัะฐะฒะปะตะฝะธะต ััะปัะบะฐะผะธ ะฝะฐ ะฟะฐะฝะตะปะธ ัะฟัะฐะฒะปะตะฝะธั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะดะพะฑะฐะฒะปัะตั ะธะปะธ ัะดะฐะปัะตั ััะปัะบะธ ะฝะฐ ะฟะฐะฝะตะปะธ ัะฟัะฐะฒะปะตะฝะธั ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-PinnedApplication -Action UnpinfromTaskbar -FilePath "$env:ProgramFilesInternet Exploreriexplore.exe"
.EXAMPLE
#Set-PinnedApplication -Action PintoTaskbar -FilePath "${env:ProgramFiles(x86)}Mozilla Firefoxfirefox.exe"
.PARAMETER Action
ะะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั, ะบะพัะพััะน ะผะพะถะตั ะฟัะธะฝะธะผะฐัั ะพะดะฝะพ ะธะท ะดะฒัั
ะทะฝะฐัะตะฝะธะน: UnpinfromTaskbar ะธะปะธ PintoTaskbar
.PARAMETER FilePath
ะะผั ััะตัะฝะพะน ะทะฐะฟะธัะธ ะฟะพะปัะทะพะฒะฐัะตะปั, ะดะปั ะบะพะณะพ ะทะฐะดะฐัััั ะฟัะฐะฒะฐ ะดะพัััะฟะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True)][String]$Action,
[Parameter(Mandatory=$True)][String]$FilePath
)
if(-not (test-path $FilePath)) {
throw "FilePath does not exist."
}
function InvokeVerb {
param([string]$FilePath,$verb)
$verb = $verb.Replace("&","")
$path = split-path $FilePath
$shell = new-object -com "Shell.Application"
$folder = $shell.Namespace($path)
$item = $folder.Parsename((split-path $FilePath -leaf))
$itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb}
if($itemVerb -eq $null){
throw "Verb $verb not found."
} else {
$itemVerb.DoIt()
}
}
function GetVerb {
param([int]$verbId)
try {
$t = [type]"CosmosKey.Util.MuiHelper"
} catch {
$def = [Text.StringBuilder]""
[void]$def.AppendLine('[DllImport("user32.dll")]')
[void]$def.AppendLine('public static extern int LoadString(IntPtr h,uint id, System.Text.StringBuilder sb,int maxBuffer);')
[void]$def.AppendLine('[DllImport("kernel32.dll")]')
[void]$def.AppendLine('public static extern IntPtr LoadLibrary(string s);')
Add-Type -MemberDefinition $def.ToString() -name MuiHelper -namespace CosmosKey.Util
}
if($global:CosmosKey_Utils_MuiHelper_Shell32 -eq $null){
$global:CosmosKey_Utils_MuiHelper_Shell32 = [CosmosKey.Util.MuiHelper]::LoadLibrary("shell32.dll")
}
$maxVerbLength=255
$verbBuilder = New-Object Text.StringBuilder "",$maxVerbLength
[void][CosmosKey.Util.MuiHelper]::LoadString($CosmosKey_Utils_MuiHelper_Shell32,$verbId,$verbBuilder,$maxVerbLength)
return $verbBuilder.ToString()
}
$verbs = @{
"PintoTaskbar"=5386
"UnpinfromTaskbar"=5387
}
if($verbs.$Action -eq $null){
Throw "Action $action not supported`nSupported actions are:`n`tPintoTaskbar`n`tUnpinfromTaskbar"
}
InvokeVerb -FilePath $FilePath -Verb $(GetVerb -VerbId $verbs.$action)
}
เจธเจฟเฉฑเจเจพ
เจธเจเฉเจฐเจฟเจชเจเจพเจ เจเฉฐเจฎ เจเจฐ เจฐเจนเฉเจเจ เจนเจจ, เจนเจฐเฉเจ เจธเจเฉเจธเจผเจจ เจฒเจ เจธเฉเจตเจพ เจฆเจพ เจธเจฎเจพเจ เจเจเจพ เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ, เจเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ. เจฎเฉเจฐเฉ เจฒเจ, เจเฉฑเจ เจฒเฉเจจเจเจธ เจเจชเจญเฉเจเจคเจพ เจตเจเฉเจ, เจตเจฟเฉฐเจกเฉเจเจผ เจจเฉเฉฐ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ เจธเจญ เจคเฉเจ เจเจธเจพเจจ เจธเจพเจนเจธ เจจเจนเฉเจ เจธเฉ, เจชเจฐ เจเจน เจเฉฑเจ เจตเจฟเจฆเจฟเจ เจ เจธเฉ. เจฎเฉเจ เจธเฉเฉฑเจเจ เฉฑเจช เจธเจเฉเจฐเจฟเจชเจ เจฆเจพ เจตเจฟเจเจพเจธ เจเจฐเจพเจเจเจพเฅค เจเฉฐเจธเจเฉเจฒ เจเฉเจคเฉ เจธเฉเจซเจเจตเฉเจ เจฐ เจ เจคเฉ เจเจเจเฉเจตเจพเจเจฐเจธ เจฆเฉ เจธเจฅเจพเจชเจจเจพ เจ เจคเฉ เจฒเจพเจเจ เจฒเจ เจเฉฑเจ เจเจพเจเจ เจเฉเฉเจจ เจฆเฉเจเจ เจฏเฉเจเจจเจพเจตเจพเจ เจนเจจเฅค
เจ เฉฐเจคเจฟเจฎ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจเจพเจฐเฉ เจนเจจ
เจชเฉเจฐเจธเจผเจพเจธเจ เจตเจเฉเจ เจเจฒเจพเจ
Function New-User {
<#
.SYNOPSIS
ะกะพะทะดะฐะฝะธะต ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัะพะทะดะฐะตั ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะดะพะฑะฐะฒะปัะตั ะตะณะพ ะฒ ะณััะฟะฟั ะะพะปัะทะพะฒะฐัะตะปะธ
.EXAMPLE
#New-User "Student" "Student"
.PARAMETER Name
ะะผั ะฝะพะฒะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Password
ะะฐัะพะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Name,
[PARAMETER(Mandatory=$True)][String]$Password
)
$Pwd = convertto-securestring $Password -asplaintext -force
$GroupSID = "S-1-5-32-545"
New-LocalUser -User $Name -AccountNeverExpires:$true -FullName $Name -Password $Pwd -PasswordNeverExpires:$true
Add-LocalGroupMember -SID $GroupSID -Member $Name
Write-Host "-- ะกะพะทะดะฐะฝ ะฟะพะปัะทะพะฒะฐัะตะปั $Name ั ะฟะฐัะพะปะตะผ $Password" -foregroundcolor Green
}
Function Remove-Users {
<#
.SYNOPSIS
ะฃะดะฐะปะตะฝะธะต ะฟะพะปัะทะพะฒะฐัะตะปะตะน
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัะดะฐะปัะตั ะฟะพะปัะทะพะฒะฐัะตะปะตะน, ะบะพัะพััะต ัะตะนัะฐั ะฝะต ะฐะบัะธะฒะฝั ะธ ะฝะต ัะฒะปััััั ัะฟะตัะธะฐะปัะฝัะผะธ
ะฃะดะฐะปััััั ะฒ ัะพะผ ัะธัะปะต ัะฐะฑะพัะธะน ะบะฐัะฐะปะพะณ ะธ ัะตะตััั ะฟะพะปัะทะพะฒะฐัะตะปะตะน
.EXAMPLE
#Remove-Users
#>
[CmdletBinding()]
$UsersProfiles = Get-WMIObject -class Win32_UserProfile -ComputerName $env:COMPUTERNAME | Where {!($_.Loaded) -and !($_.Special)}
foreach($Usr in $UsersProfiles) {
$UsrName = $Usr.LocalPath.Split("")[2]
Write-Host "-- ะฃะดะฐะปะตะฝะธะต ะฟะพะปัะทะพะฒะฐัะตะปั $UsrName ..." -foregroundcolor Green
Remove-LocalUser -Name $UsrName
Remove-WmiObject -Path $Usr.__PATH
Write-Host "-- ะะพะปัะทะพะฒะฐัะตะปั $UsrName ัะดะฐะปะตะฝ" -foregroundcolor Green
}
}
Function Set-AutoLogon {
<#
.SYNOPSIS
ะะบะปััะตะฝะธะต ะฐะฒัะพะฒั
ะพะดะฐ ะดะปั ะฟะพะปัะทะพะฒะฐัะตะปั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะฒะบะปััะฐะตั ะฐะฒัะพะฒั
ะพะด ะดะปั ัะบะฐะทะฐะฝะฝะพะณะพ ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-AutoLogon "Student" "Student"
.PARAMETER Name
ะะผั ะฟะพะปัะทะพะฒะฐัะตะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Password
ะะฐัะพะปั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Name,
[PARAMETER(Mandatory=$True)][String]$Password
)
$PathToWinlogon = "HKLM:SoftwareMicrosoftWindows NTCurrentVersionWinlogon"
New-ItemProperty -Path $PathToWinlogon -Name AutoAdminLogon -Value 1 -PropertyType "String"
New-ItemProperty -Path $PathToWinlogon -Name DefaultUserName -Value $Name -PropertyType "String"
New-ItemProperty -Path $PathToWinlogon -Name DefaultPassword -Value $Password -PropertyType "String"
}
$Source = @'
using System;
using System.Collections.Generic;
using System.Text;
namespace MyLsaWrapper
{
using System.Runtime.InteropServices;
using System.Security;
using System.Management;
using System.Runtime.CompilerServices;
using System.ComponentModel;
using LSA_HANDLE = IntPtr;
[StructLayout(LayoutKind.Sequential)]
struct LSA_OBJECT_ATTRIBUTES
{
internal int Length;
internal IntPtr RootDirectory;
internal IntPtr ObjectName;
internal int Attributes;
internal IntPtr SecurityDescriptor;
internal IntPtr SecurityQualityOfService;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct LSA_UNICODE_STRING
{
internal ushort Length;
internal ushort MaximumLength;
[MarshalAs(UnmanagedType.LPWStr)]
internal string Buffer;
}
sealed class Win32Sec
{
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern uint LsaOpenPolicy(
LSA_UNICODE_STRING[] SystemName,
ref LSA_OBJECT_ATTRIBUTES ObjectAttributes,
int AccessMask,
out IntPtr PolicyHandle
);
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern uint LsaAddAccountRights(
LSA_HANDLE PolicyHandle,
IntPtr pSID,
LSA_UNICODE_STRING[] UserRights,
int CountOfRights
);
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true),
SuppressUnmanagedCodeSecurityAttribute]
internal static extern int LsaLookupNames2(
LSA_HANDLE PolicyHandle,
uint Flags,
uint Count,
LSA_UNICODE_STRING[] Names,
ref IntPtr ReferencedDomains,
ref IntPtr Sids
);
[DllImport("advapi32")]
internal static extern int LsaNtStatusToWinError(int NTSTATUS);
[DllImport("advapi32")]
internal static extern int LsaClose(IntPtr PolicyHandle);
[DllImport("advapi32")]
internal static extern int LsaFreeMemory(IntPtr Buffer);
}
/// <summary>
/// This class is used to grant "Log on as a service", "Log on as a batchjob", "Log on localy" etc.
/// to a user.
/// </summary>
public sealed class LsaWrapper : IDisposable
{
[StructLayout(LayoutKind.Sequential)]
struct LSA_TRUST_INFORMATION
{
internal LSA_UNICODE_STRING Name;
internal IntPtr Sid;
}
[StructLayout(LayoutKind.Sequential)]
struct LSA_TRANSLATED_SID2
{
internal SidNameUse Use;
internal IntPtr Sid;
internal int DomainIndex;
uint Flags;
}
[StructLayout(LayoutKind.Sequential)]
struct LSA_REFERENCED_DOMAIN_LIST
{
internal uint Entries;
internal LSA_TRUST_INFORMATION Domains;
}
enum SidNameUse : int
{
User = 1,
Group = 2,
Domain = 3,
Alias = 4,
KnownGroup = 5,
DeletedAccount = 6,
Invalid = 7,
Unknown = 8,
Computer = 9
}
enum Access : int
{
POLICY_READ = 0x20006,
POLICY_ALL_ACCESS = 0x00F0FFF,
POLICY_EXECUTE = 0X20801,
POLICY_WRITE = 0X207F8
}
const uint STATUS_ACCESS_DENIED = 0xc0000022;
const uint STATUS_INSUFFICIENT_RESOURCES = 0xc000009a;
const uint STATUS_NO_MEMORY = 0xc0000017;
IntPtr lsaHandle;
public LsaWrapper()
: this(null)
{ }
// // local system if systemName is null
public LsaWrapper(string systemName)
{
LSA_OBJECT_ATTRIBUTES lsaAttr;
lsaAttr.RootDirectory = IntPtr.Zero;
lsaAttr.ObjectName = IntPtr.Zero;
lsaAttr.Attributes = 0;
lsaAttr.SecurityDescriptor = IntPtr.Zero;
lsaAttr.SecurityQualityOfService = IntPtr.Zero;
lsaAttr.Length = Marshal.SizeOf(typeof(LSA_OBJECT_ATTRIBUTES));
lsaHandle = IntPtr.Zero;
LSA_UNICODE_STRING[] system = null;
if (systemName != null)
{
system = new LSA_UNICODE_STRING[1];
system[0] = InitLsaString(systemName);
}
uint ret = Win32Sec.LsaOpenPolicy(system, ref lsaAttr,
(int)Access.POLICY_ALL_ACCESS, out lsaHandle);
if (ret == 0)
return;
if (ret == STATUS_ACCESS_DENIED)
{
throw new UnauthorizedAccessException();
}
if ((ret == STATUS_INSUFFICIENT_RESOURCES) || (ret == STATUS_NO_MEMORY))
{
throw new OutOfMemoryException();
}
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError((int)ret));
}
public void AddPrivileges(string account, string privilege)
{
IntPtr pSid = GetSIDInformation(account);
LSA_UNICODE_STRING[] privileges = new LSA_UNICODE_STRING[1];
privileges[0] = InitLsaString(privilege);
uint ret = Win32Sec.LsaAddAccountRights(lsaHandle, pSid, privileges, 1);
if (ret == 0)
return;
if (ret == STATUS_ACCESS_DENIED)
{
throw new UnauthorizedAccessException();
}
if ((ret == STATUS_INSUFFICIENT_RESOURCES) || (ret == STATUS_NO_MEMORY))
{
throw new OutOfMemoryException();
}
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError((int)ret));
}
public void Dispose()
{
if (lsaHandle != IntPtr.Zero)
{
Win32Sec.LsaClose(lsaHandle);
lsaHandle = IntPtr.Zero;
}
GC.SuppressFinalize(this);
}
~LsaWrapper()
{
Dispose();
}
// helper functions
IntPtr GetSIDInformation(string account)
{
LSA_UNICODE_STRING[] names = new LSA_UNICODE_STRING[1];
LSA_TRANSLATED_SID2 lts;
IntPtr tsids = IntPtr.Zero;
IntPtr tdom = IntPtr.Zero;
names[0] = InitLsaString(account);
lts.Sid = IntPtr.Zero;
//Console.WriteLine("String account: {0}", names[0].Length);
int ret = Win32Sec.LsaLookupNames2(lsaHandle, 0, 1, names, ref tdom, ref tsids);
if (ret != 0)
throw new Win32Exception(Win32Sec.LsaNtStatusToWinError(ret));
lts = (LSA_TRANSLATED_SID2)Marshal.PtrToStructure(tsids,
typeof(LSA_TRANSLATED_SID2));
Win32Sec.LsaFreeMemory(tsids);
Win32Sec.LsaFreeMemory(tdom);
return lts.Sid;
}
static LSA_UNICODE_STRING InitLsaString(string s)
{
// Unicode strings max. 32KB
if (s.Length > 0x7ffe)
throw new ArgumentException("String too long");
LSA_UNICODE_STRING lus = new LSA_UNICODE_STRING();
lus.Buffer = s;
lus.Length = (ushort)(s.Length * sizeof(char));
lus.MaximumLength = (ushort)(lus.Length + sizeof(char));
return lus;
}
}
public class LsaWrapperCaller
{
public static void AddPrivileges(string account, string privilege)
{
using (LsaWrapper lsaWrapper = new LsaWrapper())
{
lsaWrapper.AddPrivileges(account, privilege);
}
}
}
}
'@
Add-Type -TypeDefinition $Source | Out-Null
# -------------------------
# ะะตัะตัะพะทะดะฐะฝะธะต ะฟะพะปัะทะพะฒะฐัะตะปั
# -------------------------
$UserName = "Student"
$Password = "Student"
Remove-Users | Out-Null
New-User $UserName $Password | Out-Null
Set-AutoLogon $UserName $Password | Out-Null
[MyLsaWrapper.LsaWrapperCaller]::AddPrivileges($UserName, "SeBatchLogonRight") | Out-Null
write-host "-- ัะฐะทัะตัะตะฝ ะฒั
ะพะด ะฒ ะบะฐัะตััะฒะต ะฟะฐะบะตัะฝะพะณะพ ะทะฐะดะฐะฝะธั ะดะปั ะฟะพะปัะทะพะฒะฐัะตะปั $UserName" -foregroundcolor Green
schtasks /create /tn LogonUserSettings /tr "pwsh C:ScriptsSetupUser.ps1" /sc onlogon /ru $env:USERDOMAIN$UserName /rp $Password /f
เจธเจเฉเจกเฉเจเจ เจฏเฉเจเจผเจฐ เจฆเฉ เจคเจนเจฟเจค เจฒเจพเจเจ เจเฉเจคเจพ เจเจฟเจ
Function Set-Proxy {
<#
.SYNOPSIS
ะฃััะฐะฝะพะฒะบะฐ ะฟะฐัะฐะผะตััะพะฒ ะฟัะพะบัะธ
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะทะฐะดะฐะตั ะฟะฐัะฐะผะตััั ะฟัะพะบัะธ ะดะปั ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-Proxy a.cproxy.ru 8080
.PARAMETER Server
ะะดัะตั ะธะปะธ ะดะพะผะตะฝะฝะพะต ะธะผั ัะตัะฒะตัะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Port
ะะพัั (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Server,
[PARAMETER(Mandatory=$True)][Int]$Port
)
If ((Test-NetConnection -ComputerName $Server -Port $Port).TcpTestSucceeded) {
Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyServer -Value "$($Server):$($Port)"
Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyEnable -Value 1
} Else {
Write-Error -Message "-- Invalid proxy server address or port: $($Server):$($Port)"
}
}
Function Set-AccessRule {
<#
.SYNOPSIS
ะฃััะฐะฝะพะฒะบะฐ ะฟัะฐะฒะบ ะฝะฐ ะฟะฐะฟะบั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ัััะฐะฝะฐะฒะปะธะฒะฐะตั ะทะฐะดะฐะฝะฝัะต ะฟัะฐะฒะฐ ะฝะฐ ะดะธััะตะบัะพัะธั
.EXAMPLE
#Set-AccessRule -Folder $env:USERPROFILEDesktop -UserName $env:USERNAME -Rules CreateFiles,AppendData -AccessControlType Deny
.PARAMETER Folder
ะะธััะตะบัะพัะธั, ะฝะฐะด ะบะพัะพัะพะน ะฟัะพะธะทะฒะพะดะธััั ะดะตะนััะฒะธะต (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER UserName
ะะผั ััะตัะฝะพะน ะทะฐะฟะธัะธ ะฟะพะปัะทะพะฒะฐัะตะปั, ะดะปั ะบะพะณะพ ะทะฐะดะฐัััั ะฟัะฐะฒะฐ ะดะพัััะฟะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER Rules
ะัะฐะฒะฐ ะดะพัััะฟะฐ ัะตัะตะท ะทะฐะฟัััั(ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
.PARAMETER AccessControlType
ะะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั, ะบะพัะพััะน ะผะพะถะตั ะฟัะธะฝะผะฐัั ะพะดะฝะพ ะธะท ะดะฒัั
ะทะฝะฐัะตะฝะธะน: Allow ะธะปะธ Deny
#>
[CmdletBinding()]
param (
[PARAMETER(Mandatory=$True)][String]$Folder,
[PARAMETER(Mandatory=$True)][String]$UserName,
[PARAMETER(Mandatory=$True)][String]$Rules,
[PARAMETER(Mandatory=$True)][String]$AccessControlType
)
#ััะธััะฒะฐะตะผ ัะตะบััะธะน ัะฟะธัะพะบ ACL ัะฐะฑะพัะตะณะพ ััะพะปะฐ
$acl = Get-Acl $Folder
#ะกะพะทะดะฐะตะผ ะฟะตัะตะผะตะฝะฝั ั ะฝัะถะฝัะผะธ ะฟัะฐะฒะฐะผะธ
$fileSystemRights = [System.Security.AccessControl.FileSystemRights]"$Rules"
#Cะพะทะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั ั ัะบะฐะทะฐะฝะธะตะผ ะฟะพะปัะทะพะฒะฐัะตะปั, ะฟัะฐะฒ ะดะพัััะฟะฐ ะธ ัะธะฟะฐ ัะฐะทัะตัะตะฝะธั
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($UserName, $fileSystemRights, $AccessControlType)
#ะะตัะตะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั ะฒ ะบะปะฐัั FileSystemAccessRule ะดะปั ัะพะทะดะฐะฝะธั ะพะฑัะตะบัะฐ
$acl.SetAccessRule($AccessRule)
#ะัะธะผะตะฝัะตะผ ัะฐะทัะตัะตะฝะธั ะบ ะฟะฐะฟะบะต
$acl | Set-Acl $Folder
}
function Set-PinnedApplication
{
<#
.SYNOPSIS
ะฃะฟัะฐะฒะปะตะฝะธะต ััะปัะบะฐะผะธ ะฝะฐ ะฟะฐะฝะตะปะธ ัะฟัะฐะฒะปะตะฝะธั
.DESCRIPTION
ะะฐะฝะฝะฐั ััะฝะบัะธั ะดะพะฑะฐะฒะปัะตั ะธะปะธ ัะดะฐะปัะตั ััะปัะบะธ ะฝะฐ ะฟะฐะฝะตะปะธ ัะฟัะฐะฒะปะตะฝะธั ะฟะพะปัะทะพะฒะฐัะตะปั
.EXAMPLE
#Set-PinnedApplication -Action UnpinfromTaskbar -FilePath "$env:ProgramFilesInternet Exploreriexplore.exe"
.EXAMPLE
#Set-PinnedApplication -Action PintoTaskbar -FilePath "${env:ProgramFiles(x86)}Mozilla Firefoxfirefox.exe"
.PARAMETER Action
ะะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั, ะบะพัะพััะน ะผะพะถะตั ะฟัะธะฝะธะผะฐัั ะพะดะฝะพ ะธะท ะดะฒัั
ะทะฝะฐัะตะฝะธะน: UnpinfromTaskbar ะธะปะธ PintoTaskbar
.PARAMETER FilePath
ะะผั ััะตัะฝะพะน ะทะฐะฟะธัะธ ะฟะพะปัะทะพะฒะฐัะตะปั, ะดะปั ะบะพะณะพ ะทะฐะดะฐัััั ะฟัะฐะฒะฐ ะดะพัััะฟะฐ (ะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั)
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True)][String]$Action,
[Parameter(Mandatory=$True)][String]$FilePath
)
if(-not (test-path $FilePath)) {
throw "FilePath does not exist."
}
function InvokeVerb {
param([string]$FilePath,$verb)
$verb = $verb.Replace("&","")
$path = split-path $FilePath
$shell = new-object -com "Shell.Application"
$folder = $shell.Namespace($path)
$item = $folder.Parsename((split-path $FilePath -leaf))
$itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb}
if($itemVerb -eq $null){
throw "Verb $verb not found."
} else {
$itemVerb.DoIt()
}
}
function GetVerb {
param([int]$verbId)
try {
$t = [type]"CosmosKey.Util.MuiHelper"
} catch {
$def = [Text.StringBuilder]""
[void]$def.AppendLine('[DllImport("user32.dll")]')
[void]$def.AppendLine('public static extern int LoadString(IntPtr h,uint id, System.Text.StringBuilder sb,int maxBuffer);')
[void]$def.AppendLine('[DllImport("kernel32.dll")]')
[void]$def.AppendLine('public static extern IntPtr LoadLibrary(string s);')
Add-Type -MemberDefinition $def.ToString() -name MuiHelper -namespace CosmosKey.Util
}
if($global:CosmosKey_Utils_MuiHelper_Shell32 -eq $null){
$global:CosmosKey_Utils_MuiHelper_Shell32 = [CosmosKey.Util.MuiHelper]::LoadLibrary("shell32.dll")
}
$maxVerbLength=255
$verbBuilder = New-Object Text.StringBuilder "",$maxVerbLength
[void][CosmosKey.Util.MuiHelper]::LoadString($CosmosKey_Utils_MuiHelper_Shell32,$verbId,$verbBuilder,$maxVerbLength)
return $verbBuilder.ToString()
}
$verbs = @{
"PintoTaskbar"=5386
"UnpinfromTaskbar"=5387
}
if($verbs.$Action -eq $null){
Throw "Action $action not supported`nSupported actions are:`n`tPintoTaskbar`n`tUnpinfromTaskbar"
}
InvokeVerb -FilePath $FilePath -Verb $(GetVerb -VerbId $verbs.$action)
}
Set-Proxy cproxy.udsu.ru 8080
Set-AccessRule -Folder $env:USERPROFILEDesktop -UserName $env:USERNAME -Rules "CreateFiles,AppendData,Delete" -AccessControlType Deny
Set-PinnedApplication -Action UnpinfromTaskbar -FilePath "$env:ProgramFilesInternet Exploreriexplore.exe"
Set-PinnedApplication -Action PintoTaskbar -FilePath "${env:ProgramFiles(x86)}Mozilla Firefoxfirefox.exe"
Set-PinnedApplication -Action PintoTaskbar -FilePath "$env:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Office 2013Excel 2013.lnk"
Set-PinnedApplication -Action PintoTaskbar -FilePath "$env:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Office 2013Word 2013.lnk"
Set-PinnedApplication -Action PintoTaskbar -FilePath "$env:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Office 2013PowerPoint 2013.lnk"
Set-PinnedApplication -Action PintoTaskbar -FilePath "$env:ProgramDataMicrosoftWindowsStart MenuProgramsะะกะะะะะะะะะก-3D V16ะะะะะะก-3D V16.lnk"
# ะฃะดะฐะปะตะฝะธะต ะทะฐะดะฐัะธ, ะฟะพัะปะต ะตะต ะฒัะฟะพะปะฝะตะฝะธั
Unregister-ScheduledTask -TaskName UdSUSettingStudent -Confirm:$false
เจธเจฐเฉเจค: www.habr.com