PowerShell中实现混淆密码示例_PowerShell

适用于PowerShell 3.0或者更高版本,
尽管我们并不推荐将密码硬编码在脚本文件中,但是仍旧有一些场景非如此不可。与将密码以一种纯文本的方式硬编码相比,我们还可以稍微花点心思,把密码混淆一下。虽然混淆密码是一种非常低级的保护方式,但是对于不懂PowerShell的人来讲,还是比较神秘的。

接下来的脚本会向用户询问用户名和密码,然后删除通过混淆脚本进行处理,产生用户凭据对象。

当你运行了下面的脚本以后,用户凭据已经被保存在$cred。接下来你几乎可以在任何带有–Credential参数的命令中使用它了。

复制代码 代码如下:

$cred = Get-Credential -Message 'Enter Domain\Username and Password'
$pwd = $cred.Password
$user = $cred.UserName
$key = 1..32 | ForEach-Object { Get-Random -Maximum 256 }
$pwdencrypted = $pwd | ConvertFrom-SecureString -Key $key
 
$private:ofs = ' '
 
$generatedScript = @()
$generatedScript += '$password = ''{0}''' -f $pwdencrypted
$generatedScript += '$key = ''{0}''' -f "$key "
 
$generatedScript += '$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split('' ''))'
$generatedScript += '$cred = New-Object system.Management.Automation.PSCredential(''{0}'', $passwordSecure)' -f $user
$generatedScript += '$cred'
 
$file = $psise.CurrentPowerShellTab.Files.Add()
$file.Editor.Text = $generatedScript | Out-String
$file.Editor.SetCaretPosition(1,1)

产生的密码可能像这样:

复制代码 代码如下:

$password = '76492d1116743f0423413b16050a5345MgB8AHMAUQA3AFAAVwB0AGkAUQBUAC8AdwBqADYAUABVAFYAUwB4AEYAYgB4AFEAPQA9AHwAZgA0ADgAOQA4AGYANwA0AGEAMAA0ADUANwA5ADkAMwA5ADkAMwA1ADUANQA0AGYANwA5AGQANwBkAGYAOQBmAGEAYQA3ADMAYgBkADIAOQA3AGMAYQBmADUAMgA3ADEANwA3AGEAYgBmADAAYgA1AGYAYwAyADYAYgAzADkAOAA='
$key = '187 98 34 82 148 52 13 86 246 2 130 197 217 97 147 98 75 197 149 246 74 35 27 7 211 15 131 93 182 231 171 3'
$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(' '))
$cred = New-Object system.Management.Automation.PSCredential('mickey\mouse', $passwordSecure)
$cred

时间: 2024-09-25 22:46:39

PowerShell中实现混淆密码示例_PowerShell的相关文章

PowerShell中的函数重载示例_PowerShell

在PowerShell中,我们可以使用Function关键字来定义一个函数,比如: Function Get-Data { Param ( [int] $data = -1 ) return $data; } 这个名为Get-Data的函数接收一个int类型的参数$data,直接将其返回.那么,我同时还需要一个接收string类型的Get-Data函数怎么办?方法比较奇怪,至少和传统的C++之类的语言不同. 在PowerShell中定义重载函数,需要指定参数所属的Parameter Set,如下

Powershell中Finally语句用法示例_PowerShell

在之前的小技巧中,我们曾经引入过,一个有声的进度条.在PowerShell正在做某项忙碌的任务时,可以一直让它播放某段音乐.代码如下: 复制代码 代码如下: # 在windows 文件夹下面找到要给可用的wav音频文件 $WAVPath = Get-ChildItem -Path $env:windir -Filter *.wav -Recurse -ErrorAction SilentlyContinue |  Select-Object -First 1 -ExpandProperty Fu

PowerShell中的强类型数组介绍_PowerShell

在PowerShell中,当我们将一串强类型的值赋给一个变量时,这个变量就成了强类型数组.如果在一个强类型的数组中增加一个非强类型的数组元素(使用"+="操作符),这时该数组将又变回普通数组. 看看这个例子: 复制代码 代码如下: PS> $array = [Int[]](1,2,3,4,5) PS> $array.GetType().FullName System.Int32[] PS> $array += "foo" PS> $array

PowerShell中判断闰年的方法_PowerShell

使用PowerShell可以很方便的判断一个年限是不是闰年,只要一句话搞定,IsLeapYear函数,真是革命啊! 小编以前在学其它语言的时候,给定一个年限,判断它是闰年或平年,需要写大段大段的代码去实现.C#出来之后,这个问题解决了,DateTime类型下面有一个静态方法:IsLeapYear(int year).使用这个方法可以直接返回True或False.True即表示闰年,False表示平年. 且看演示代码: 复制代码 代码如下: PS C:\Users\zhanghong> [date

PowerShell中计算时间差的方法_PowerShell

PowerShell中有一个New-TimeSpan的cmdlet,使用它可以很方便的计算两个时间之间的差值.差值还可以提取出年.月.日.时.分.秒. 以前,小编想要知道当时时间到十一放假还有多少天时,小编一般会写一个VBScript脚本来简单计算一下.这个VBScript脚本很简单,只有一句话: 复制代码 代码如下: MsgBox DateDiff("d", Now(), "2013-10-1") 新建一个纯文本文件,把这句话放进去.然后再把这个文件的文件名改为x

PowerShell中终止管道的方法_PowerShell

如果你能够提前知道你想从管道中获取元素的个数,可以使用Select-Object来终止流处理命令的的管道,这会节省很多时间. 下面的例子会从Windows文件夹下搜寻 explorer.exe示例,因为Select-Object语句可以在管道找到结果的那一瞬终止管道.否则,Get-ChildItem会递归的遍历所有子目录然后匹配出你想要的结果. 复制代码 代码如下: #requires -Version 3 Get-ChildItem -Path c:\Windows -Recurse -Fil

Powershell使用OpenFileDialog打开文件示例_PowerShell

支持所有版本. 要添加某些文件到你的脚本中,下面一个例子使用一个文件对话框来获得一个文件: 复制代码 代码如下: function Show-OpenFileDialog {   param   ($Title = 'Pick a File', $Filter = 'All|*.*|PowerShell|*.ps1')     $type = 'Microsoft.Win32.OpenFileDialog'       $dialog = New-Object -TypeName $type  

Powershell中定义常量的方法_PowerShell

支持所有版本. 通常变量是可变的,你可以修改他们,除非你使用的是一个常量. 可是这里没有这样的变量但常量它可以被创建,这里创建了一个值为1的常量. 复制代码 代码如下: New-Variable -Name cannotChange -Value 1 -Option Constant 当脚本运行时你不可以再改变这个变量的值,此变量与值将绑定在此会话,所以某个明确的信息永远不会改变时,可以使用常量. 你也可以在配置文件定义常量: 复制代码 代码如下: PS> $profile.AllUsersAl

Powershell中显示隐藏文件的方法_PowerShell

支持PS3.0及以后版本. 当你使用 Get-ChildItem 检索文件,默认是不显示隐藏文件的. 要包含隐藏文件,请使用 –Force 参数. 复制代码 代码如下: PS> Get-ChildItem -Path $home -Force 如果只需要显示隐藏文件,可以使用参数-Hidden ,但它只支持PS3.0. 复制代码 代码如下: PS> Get-ChildItem -Path $home -Hidden     Directory: C:\Users\Tobias Mode