PowerShell脚本授权最佳实践
【TechTarget中国原创】 Windows PowerShell已成为微软在Windows Server上提供的首选管理界面。因为深度整合到Windows Server操作系统,PowerShell表面看上去可以不受任何限制做任何事情。然而,实际上能做得并没有那么多。 Windows Server最好用的功能之一就是可以运行脚本。PowerShell脚本允许代码重复使用,并支持运行复杂的命令序列,这是其他方式无法实现的。 PowerShell脚本的编写者必须关注的一个大问题就是授权。PowerShell是一个功能强大的脚本语言,但只有具备了适当的权限,PowerShell脚本才能正确运行。这一要求有时会带来问题,因为管理员通常被建议只使用标准、用户级权限的帐号登录进行日常操作。管理员帐号通常是保留不用的,只在运行明确需要提升PowerShell脚本权限的任务时才会启用。因此带来的问题就是在并不能保证运行脚本的人具有管理员权限的情况下,如何知道一段PowerShell脚本是否具有运行所需要的权限。 有两种方式能够处理这类PowerShell脚本权限的问题。大多数情况下,一个需要提升权限的PowerShell脚本运行时会执行脚本级的授权认证来获取所需的权限。 管理员编写脚本时采用何种方式授权,取决于该脚本运行时是否支持互动操作。如果一个脚本只是由管理员手动调用,则运行时管理员在场,可以要求管理员手动输入凭证,因此不会带来任何问题。这种方式在两种方式中更为安全,因为管理员授权凭证不会被存储。相反的,如果一个脚本是被自动进程调用的,此时并不能保证管理员在场并能够输入密码。这种情况下,脚本需要能够自动取得密码用于授权。 PowerShell互动授权方法 互动授权是两种方式中更为安全的一种,因为授权凭证不会被存储用作它用。调用互动授权使用Get-Credential命令。通常,Get-Credential的结果被映射为一个变量,因此所获得的凭证可以被映射配置到一条需要授权的命令上。 $c = Get-Credential Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 在以上例子中,Get-Credential命令被映射为变量$c。运行这句脚本会使Windows弹出一个对话框,要求输入管理员凭证,如图1所示。 图1. 运行Get-Credential命令会弹出对话框,要求输入管理员凭证 注意代码的第二行,Get-WmiObject命令需要授权使用,该授权通过命令最后添加的–Credential转换完成,$c中记录了授权所需的凭证,即刚才输入的用户名和密码。 PowerShell自动授权方法 PowerShell自动授权工作机制与互动授权有所不同。执行自动授权时,需要事先存储凭证信息以便PowerShell在需要时能够获取得到。存储凭证的代码如下所示: Read-Host –AsSecureString | ConvertFrom-SecureString | Out-File C:\Scripts\Password.txt 输入以上命令后,用户输入密码——没有任何密码输入提示,用户仅仅需要输入密码并按下回车键。因为以安全字符串方式处理,输入的密码是掩码显示的,如图2所示。一旦输入完成,密码被写入到一个文本文件中,在该例中,即C:\Scripts\Password.txt,你也可以使用任何其他路径和文件名。密码在文件中以加密的格式存储,如图3所示。 图2. 此命令接受一个密码,然后将密码写入一个文本文件 图3. 文本文件以加密格式存储密码 这种情况下,脚本中通常会设置3个变量。第一个变量为包含在脚本代码中直接指定的用户名。第二个变量保存从文件中读取的密码。第三个变量存储将用户名和密码作为一个整体的凭证。代码如下所示: $Username = "poseydemo\Administrator" $Password = Get-Content c:\scripts\cred.txt | ConvertTo-SecureString $C = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 如你所见,$Username存储用户名,$Password存储密码,$C存储凭证。 如果选择自动授权完成为PowerShell脚本权限配置,必须确保密码文件保存在一个安全的位置。否则其他PowerShell脚本可以简单地通过读取密码文件内容,获得管理员权限。
TechTarget中国原创内容,原文链接: http://www.searchsv.com.cn/showcontent_92944.htm
© TechTarget中国:http://www.techtarget.com.cn
PowerShell脚本授权最佳实践的更多相关文章
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- Dotnet core使用JWT认证授权最佳实践(二)
最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 第一部分:Dotnet core使用JWT认证授权最佳实践(一) ...
- 编写Shell脚本的最佳实践,规范二
需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...
- 编写 Shell 脚本的最佳实践
转自:http://kb.cnblogs.com/page/574767/ 前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看 ...
- 编写Shell脚本的最佳实践,规范一
随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码 ...
- Dotnet core使用JWT认证授权最佳实践(一)
最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 一.JWT JSON Web Token (JWT)是一个开放标准 ...
- Shell 脚本编程最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...
- MySQL安装脚本最佳实践
MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash export host_ip=192.168.7.206 echo '#1.取master主机ip的后三位 ...
- Shell脚本最佳实践
Shell脚本最佳实践 0. 编码.缩进.文件命名和权限设置等 使用utf-8编码: 统一使用tab缩进或空格缩进,不要混用: 文件名以.sh结尾,并且统一风格: 添加可执行权限: chmod +x ...
随机推荐
- python 输出奇偶数并排序
random_numbers = [] for i in range(40): random_numbers.append(random.randint(1, 100)) num1 = [] num2 ...
- 如何查看某个用户指定时间段的ABAP开发记录
输入用户名和想查询的时间段: 执行得到结果.双击可查看具体代码: 工具源代码: REPORT tool_dev_history. PARAMETERS: name TYPE usr02-bname O ...
- 实例详解Django的 select_related
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- C/C++语言代码规范
1.标识符名称: 标识符名称包括函数名.常量名.变量名等.这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能 够见名知义,有助于对程序功能的理解.规则如下: 所有宏定义.枚举常数和const ...
- redis 系列 在 vs上 set,get 键值
1.启动两个 cmd,一个用于打开服务,一个用于运行客户端. 详细步骤可见上一篇文章 2.下载nuget的 ServiceStack.Redis; ,并在using中引用 ,详细步骤可见上一篇文章 ...
- 【洛谷P1939】 矩阵加速模板
https://www.luogu.org/problemnew/show/P1939 矩阵快速幂 斐波那契数列 首先看一下斐波那契数列的矩阵快速幂求法: 有一个矩阵1*2的矩阵|f[n-2],f[n ...
- redis 过期回调通知
redis 过期回调通知 背景 在使用redis的过程中,有时我们会遇到这种情景,当key过期的时候,我们需要去重新做一些操作,比如重新生成value等.之前,一直用的是添加一个celery定时任务, ...
- EBS并发管理器启动失败,系统暂挂,在重置计数器之前修复管理程序
今天EBS安装补丁之后,因为停并发管理器的时候,因为关闭EBS应用时,并发管理器没有在前台停止,就直接停了应用服务,导致启动时,并发管理器直接起不来了,使用adcmctl.sh也没有办法启动. 进入系 ...
- RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案
问题现象: [root@ora12c ghome]# /opt/oracle/ghome/root.sh Performing root user operation. The following e ...
- 使用winsw将spring-boot jar包注册成windows服务
背景:最近的项目中使用spring-boot, https://github.com/kohsuke/winsw/releases <service> <id>YJPSS< ...