106 lines
2.8 KiB
PowerShell
106 lines
2.8 KiB
PowerShell
|
Enum PlatformType {
|
|||
|
Windows
|
|||
|
Linux
|
|||
|
OSX
|
|||
|
}
|
|||
|
|
|||
|
function Get-Platform {
|
|||
|
# Use the .NET Core APIs to determine the current platform; if a runtime
|
|||
|
# exception is thrown, we are on FullCLR, not .NET Core.
|
|||
|
try {
|
|||
|
$Runtime = [System.Runtime.InteropServices.RuntimeInformation]
|
|||
|
$OSPlatform = [System.Runtime.InteropServices.OSPlatform]
|
|||
|
|
|||
|
$IsLinux = $Runtime::IsOSPlatform($OSPlatform::Linux)
|
|||
|
$IsOSX = $Runtime::IsOSPlatform($OSPlatform::OSX)
|
|||
|
$IsWindows = $Runtime::IsOSPlatform($OSPlatform::Windows)
|
|||
|
} catch {
|
|||
|
try {
|
|||
|
$IsLinux = $false
|
|||
|
$IsOSX = $false
|
|||
|
$IsWindows = $true
|
|||
|
}
|
|||
|
catch { }
|
|||
|
}
|
|||
|
if($IsOSX) {
|
|||
|
[PlatformType]::OSX
|
|||
|
} elseif($IsLinux) {
|
|||
|
[PlatformType]::Linux
|
|||
|
} else {
|
|||
|
[PlatformType]::Windows
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function Set-SecureFileACL
|
|||
|
{
|
|||
|
param(
|
|||
|
[string]$FilePath,
|
|||
|
[System.Security.Principal.NTAccount]$Owner = $null
|
|||
|
)
|
|||
|
|
|||
|
$myACL = Get-ACL -Path $FilePath
|
|||
|
$myACL.SetAccessRuleProtection($True, $True)
|
|||
|
Set-Acl -Path $FilePath -AclObject $myACL
|
|||
|
|
|||
|
$myACL = Get-ACL $FilePath
|
|||
|
$actualOwner = $null
|
|||
|
if($owner -eq $null)
|
|||
|
{
|
|||
|
$actualOwner = New-Object System.Security.Principal.NTAccount($($env:USERDOMAIN), $($env:USERNAME))
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$actualOwner = $Owner
|
|||
|
}
|
|||
|
|
|||
|
$myACL.SetOwner($actualOwner)
|
|||
|
|
|||
|
if($myACL.Access)
|
|||
|
{
|
|||
|
$myACL.Access | % {
|
|||
|
if(-not ($myACL.RemoveAccessRule($_)))
|
|||
|
{
|
|||
|
throw "failed to remove access of $($_.IdentityReference.Value) rule in setup "
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
|
|||
|
($actualOwner, "FullControl", "None", "None", "Allow")
|
|||
|
$myACL.AddAccessRule($objACE)
|
|||
|
|
|||
|
Set-Acl -Path $FilePath -AclObject $myACL
|
|||
|
}
|
|||
|
|
|||
|
function Add-PermissionToFileACL
|
|||
|
{
|
|||
|
param(
|
|||
|
[string]$FilePath,
|
|||
|
[System.Security.Principal.NTAccount] $User,
|
|||
|
[System.Security.AccessControl.FileSystemRights]$Perm
|
|||
|
)
|
|||
|
|
|||
|
$myACL = Get-ACL $filePath
|
|||
|
|
|||
|
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
|
|||
|
($User, $perm, "None", "None", "Allow")
|
|||
|
$myACL.AddAccessRule($objACE)
|
|||
|
|
|||
|
Set-Acl -Path $filePath -AclObject $myACL
|
|||
|
}
|
|||
|
|
|||
|
function Add-PasswordSetting
|
|||
|
{
|
|||
|
param([string] $pass)
|
|||
|
$platform = Get-Platform
|
|||
|
if ($platform -eq [PlatformType]::Windows) {
|
|||
|
if (-not($env:DISPLAY)) {$env:DISPLAY = 1}
|
|||
|
$env:SSH_ASKPASS="$($env:ComSpec) /c echo $pass"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function Remove-PasswordSetting
|
|||
|
{
|
|||
|
if ($env:DISPLAY -eq 1) { Remove-Item env:\DISPLAY }
|
|||
|
Remove-item "env:SSH_ASKPASS" -ErrorAction SilentlyContinue
|
|||
|
}
|