当以管理员身份运行公司名片只运行

钛土

我已经编辑了找到的脚本,以收集有关网络设备的容量管理,并且一切正常

想法是:出于安全原因,我需要将Powershell脚本制作为.exe,这没问题,我将其抛出Powergui,一切都很好,当用户使用时,应用程序(.exe)需要在运行时运行(右键单击-RUN AS ADMIN ),如果他只是双击它,则该exe必须给出某种错误,说该应用程序不能在正常的运行状态下运行

它必须仅以运行方式以ADMIN的身份运行,我想到了UAC,但这取决于计算机,我需要它仅取决于exe,没有组策略,也没有UAC,有什么想法吗?我考虑过用C +制作一个EXE,它将在特殊环境下在其中运行脚本,并自行找到授予其权限的进程,但是我失败了,

如果需要,我也可以共享脚本

任何的想法 ?:)

开始自动化

这两行代码可让您检测当前用户是否正在以管理员身份运行:

$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$isAdmin = (New-Object Security.Principal.WindowsPrincipal $currentUser).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

但是为什么要停在那里?我对自己的一些需要admin的脚本感到恼火,因此我制作了非常漂亮的一小段代码,这些脚本会将脚本打包到后台。

$asJobOrElevate = {
        param($CommandInfo, [switch]$OnlyCommand, [string[]]$AdditionalModules, [Hashtable]$Parameter, [Switch]$RequireAdmin)

        $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
        $isAdmin = (New-Object Security.Principal.WindowsPrincipal $currentUser).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

        if ($AsJob -or $Throttle -or (-not $isAdmin) -and $requireAdmin) {           
            if ($onlyCommand) {             
                $AdditionalModules = $AdditionalModules | Select-Object -Unique
                $myDefinition = [ScriptBLock]::Create("
$(if ($AdditionalModules) {"
    Import-Module '$($AdditionalModules -join ("','"))'
"})

function $commandInfo {
   $($commandInfo | Select-Object -ExpandProperty Definition)
 }
")                        
} else {
    $myModule = $CommandInfo.ScriptBlock.Module

    $AdditionalModules += $myModule | Split-Path
    $AdditionalModules += $myModule.RequiredModules | Split-Path
    $AdditionalModules = $AdditionalModules | Select-Object -Unique
    $myDefinition = [ScriptBLock]::Create("

$(if ($AdditionalModules) { "
    Import-Module '$($AdditionalModules -join ("','"))'
"})
")                   
 }
 $null = $Parameter.Remove('AsJob')                                    
 $null = $Parameter.Remove('Throttle')
 $null = $Parameter.Remove('RequireAdmin')                                    
 $myJob= [ScriptBLock]::Create("" + {                        
param([Hashtable]$parameter)                         

} + $myDefinition + "                        

        $commandInfo `@parameter                        
")      



          if ($Throttle) {

            $jobLaunched=  $false

            do {
                if ($myJobs) {
                    $myJobs | 
                        Receive-Job
                }


                $runningJobs = $myJobs | 
                    Where-Object { $_.State -ne 'Running' }
 if ($runningJobs) {
                    $runningJobs | 
                        Remove-Job -Force
                }



                if ($myJobs.Count -lt $throttle) {
                    $null = Start-Job -Name "${MyCmd}_Background_Job" -ScriptBlock $myJob -ArgumentList $Parameter
                    $JobLaunched = $true
                }

                $myJobs =  Get-Job -Name "${MyCmd}_Background_Job" -ErrorAction SilentlyContinue
                Write-Progress "Waiting for Jobs to Complete" "$($myJobs.Count) Running" -Id $ProgressId  
            } until ($jobLaunched)

            $myJobs =  Get-Job -Name "${MyCmd}_Background_Job" -ErrorAction SilentlyContinue
            $myJobs  | 
                Wait-Job | 
                Receive-Job
            return 
        } elseif ($asJob) {
            return Start-Job -ScriptBlock $myJob -ArgumentList $Parameter -Name "${CommandInfo}_Background_Job"

        } elseif ((-not $isAdmin) -and $RequireAdmin) {
                $fullCommand = "
 `$parameter = $(Write-PowerShellHashtable -InputObject $parameter)
 & { $myJob } `$parameter

 "

            $encodedCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCommand))


            return  Start-Process powershell -Verb Runas -ArgumentList '-encodedCommand', $encodedCommand -PassThru

        }
    }
    }

原谅可怕的压痕。长代码块不是StackOverflow的朋友。如果您使用以下行运行该脚本块:

$launched = . $asJobOrElevate $MyInvocation.MyCommand -Parameter $psBoundParameters -RequireAdmin

如果还不是管理员,它将以管理员身份启动,并带有UAC提示。它还支持在后台作业中运行命令或将其限制为许多正在运行的作业。

要在本地环境中查看此代码技巧(或者只是更轻松地进行复制/粘贴),请查看Powershell Pipeworks中ConvertTo-ModuleService的源代码它在函数的顶部,并且是begin {}块中的第一件事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以非管理员身份运行代码

来自分类Dev

以管理员身份运行.hta

来自分类Dev

无法以管理员身份运行

来自分类Dev

以管理员身份运行的脚本

来自分类Dev

要求程序以管理员身份运行

来自分类Dev

以管理员身份运行 cmd scala

来自分类Dev

以管理员身份运行 Ubuntu

来自分类Dev

运行对话框“以管理员身份运行”选项

来自分类Dev

C ++:以管理员身份运行程序

来自分类Dev

以管理员身份以完全特权运行Java文件

来自分类Dev

C ++-以管理员身份运行进程时,GetUserName()

来自分类Dev

TFS构建:以管理员身份运行Powershell脚本

来自分类Dev

在启动时以管理员身份运行

来自分类Dev

Visual Studio 2013将无法以管理员身份运行

来自分类Dev

始终以管理员身份通过ConEmu运行cmd

来自分类Dev

使用Java代码以管理员身份运行cmd

来自分类Dev

以管理员身份运行Alfresco Java代码

来自分类Dev

以管理员身份传递参数来运行脚本

来自分类Dev

如何让“以管理员身份运行”罐中的应用

来自分类Dev

在C#中制作流程以管理员身份运行

来自分类Dev

通过Python以管理员身份运行.exe文件

来自分类Dev

如何在Windows中以管理员身份运行命令

来自分类Dev

始终以管理员身份运行程序

来自分类Dev

C ++:以管理员身份运行程序

来自分类Dev

使exe文件以管理员身份自动运行

来自分类Dev

为什么禁用“以管理员身份运行该程序”?

来自分类Dev

检测PowerShell是否以管理员身份运行

来自分类Dev

从用户帐户以管理员身份运行MSI文件

来自分类Dev

以本地管理员身份运行Powershell脚本