当您用 Invoke-Command 远程执行 PowerShell 代码时,您的凭据将会锁定在首个连接的机器上。
PowerShell 远程连接默认情况下不会传递您的凭据,不会使用您的凭据来登录别的系统。这听起来是个好主意,不过在某些情况也严重限制了您的代码。
这是一个典型的错误代码:
1 | $code = |
这段代码试图在远程访问一个文件共享。但是即便您有权限访问该共享,这段远程代码也无法使用您的身份进行第三方验证(在这个例子中是文件服务器)。
当您用 Invoke-Command 远程执行 PowerShell 代码时,您的凭据将会锁定在首个连接的机器上。
PowerShell 远程连接默认情况下不会传递您的凭据,不会使用您的凭据来登录别的系统。这听起来是个好主意,不过在某些情况也严重限制了您的代码。
这是一个典型的错误代码:
1 | $code = |
这段代码试图在远程访问一个文件共享。但是即便您有权限访问该共享,这段远程代码也无法使用您的身份进行第三方验证(在这个例子中是文件服务器)。
Ever wondered why some programs launch whenever you log into Windows? Here’s a one liner listing autostarts that affect your login:
是否好奇为什么有些程序在登录 Windows 的时候会自动启动?这是一行列出登录时自启动项的代码:
1 | #requires -Version 3 |
PowerShell 技能连载 - Getting List of Current Group Memberships
当您可以通过 Active Directory 来获取一个用户的组成员,有一个简单的方法是直接通过用户的 access token 获取信息,而不需要 AD 联系人。
这行代码将取出当前用户所在的所有组的 SID:
1 | #requires -Version 3.0 |
这是获取翻译后的组名的方法:
1 | #requires -Version 3.0 |
如果这个列表中有重复,那么您就可以知道有多个 SID 指向同一个名字。这种情况在您曾经迁移过 AD(SID 历史)时可能会发生。只需要将结果用管道输出到 Sort-Object -Unique 就能移除重复。
PowerShell 技能连载 - 将 SID 翻译为用户名
是否希望将安全标识符(SID)翻译为一个真实的名称?这个函数将能够帮助您:
1 | #requires -Version 3.0 |
您可以通过参数传入 SID,或通过管道传入一个或多个 SID 给这个函数。
这是获取地理位置信息的另一个免费源,它能够获取您当前的公网 IP 和位置信息:
1 | #requires -Version 3.0 |
结果大概如下:
1 | ip : 80.187.113.144 |
这是获取您操作系统信息的一行代码:
1 | Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property *OS* |
结果看起来类似如下:
1 | ForegroundApplicationBoost : 2 |
如果您想知道这些数字代表什么意思,可以在网上搜索 Win32_OperatingSystem 第一个链接就会引导您到对应的 MSDN 文档。
如果您想从一个远程系统中获取信息,请使用 -ComputerName 和 –Credential 参数。
PowerShell 技能连载 - 在 Active Directory 中查找操作系统版本
如果您安装了带有 “ActiveDirectory” PowerShell 模块的 Microsoft RSAT 工具,以下是一个快速获取您环境中操作系统清单的快速方法:
1 | #requires -Module ActiveDirectory |
这将获得所有计算机的信息。您可以将搜索范围限制在指定的计算机名和 AD 位置中。以下命令将搜索范围限制在 $root AD 范围内,以及只包含名字以 “Serv” 开头的计算机中:
1 | #requires -Module ActiveDirectory |
PowerShell 技能连载 - 查找一个月中的第一天和最后一天
您是否曾需要了解某个月的第一天和最后一天?
以下是一个简单的实现方法:
1 | # specify the date you want to examine |
PowerShell 技能连载 - 在地图上定位您的地理位置
在前一个技能当中,通过 Internet 能知道您的 IP 地址,以及地理位置。您可以获得当前公开 IP 地址的经纬度,代码如下:
1 | $ip = Invoke-RestMethod -Uri http://checkip.amazonaws.com/ |
如果您希望看到它究竟在什么位置,可以将这些信息连到 Google Maps 上:
1 | $ip = Invoke-RestMethod -Uri http://checkip.amazonaws.com/ |
这段代码将打开浏览器,导航到 Google Maps,并且在地图上显示当前位置。当前通过 IP 地址定位地理位置还比较粗糙,至少在使用公开地理数据时。
您是否希望了解您当前连接到 Internet 的公开 IP 地址?以下是一行代码:
1 | #requires -Version 3.0 |
通过这个 IP 地址,您还可以向 Internet 请求您的地理地址:
1 | #requires -Version 3.0 |