16,553
社区成员
发帖
与我相关
我的任务
分享
Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和脚本环
境,两者既可以独立使用也可以组合使用。
与接受和返回文本的大多数 shell 不同,Windows PowerShell 是在 .NET Framework 公共语言运行时 (CLR) 和 .NET
Framework 的基础上构建的,它接受和返回 .NET Framework 对象。环境中的这一根本更改带来了管理和配置 Windows 的
全新工具和方法。
Windows PowerShell 引入了 cmdlet(读作“command-let”)的概念,这是内置到 shell 中的一个简单的单一功能命令行
工具。可以分别使用每个 cmdlet,但是组合使用这些简单的工具执行复杂任务时才发挥其作用。Windows PowerShell 包括
一百多个基本的核心 cmdlet,您可以编写自己的 cmdlet 并与其他用户共享它们。
与许多 shell 一样,Windows PowerShell 为您提供了对计算机上文件系统的访问。此外,使用 Windows PowerShell 提供
程序还可以访问其他数据存储,如注册表和数字签名证书存储,就像访问文件系统一样容易。
PS D:\psEnv> $path ="LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local"
$NewUser = Rename-Ldap $path "NewUser"
"`r";$Path;$NewUser
LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local
LDAP://CN=NewUser,OU=VB.NET,OU=TopC,DC=mydomain,DC=local
PS D:\psEnv> $path ="LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local"
$parent = Get-ldapParent $Path
$NewUser = Add-ldapChild $Parent "CN=NewUser"
"`r";$Path;$parent;$NewUser
LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local
LDAP://OU=VB.NET,OU=TopC,DC=mydomain,DC=local
LDAP://CN=NewUser,OU=VB.NET,OU=TopC,DC=mydomain,DC=local
PS D:\psEnv> $Root = Get-Ldap
$Path ="LDAP://CN=099f1587-af70-49c6-ab6c-7b3e82be0fe2,CN=Operations,CN=ForestUpdates,CN=Configuration,DC=mydomain,DC=local"
While($Path -ne $Root)
{
Write-Host $Path
$Path = Get-LdapParent $Path
}
$Path
LDAP://CN=099f1587-af70-49c6-ab6c-7b3e82be0fe2,CN=Operations,CN=ForestUpdates,CN=Configuration,DC=mydomain,DC=local
LDAP://CN=Operations,CN=ForestUpdates,CN=Configuration,DC=mydomain,DC=local
LDAP://CN=ForestUpdates,CN=Configuration,DC=mydomain,DC=local
LDAP://CN=Configuration,DC=mydomain,DC=local
LDAP://DC=mydomain,DC=local
PS D:\psEnv> $ldap = Get-Ldap
$ldap
LDAP://DC=mydomain,DC=local
PS D:\psEnv> $ldap = Get-Ldap ([adsi]"LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local")
$ldap
LDAP://CN=csdnlzmtw,OU=VB.NET,OU=TopC,DC=mydomain,DC=local
New-Variable -Name LdapRoot -Visibility Private -Option Readonly -value ([String]::Concat("LDAP://" ,([adsi]"LDAP://RootDSE").defaultNamingContext)) -Scope Global
New-Variable -Name LdapMail -Visibility Private -Option Readonly -value ((([adsi]"LDAP://RootDSE").ldapServiceName.Value).SubString((([adsi]"LDAP://RootDSE").ldapServiceName.Value).LastIndexOf("@"))) -Scope Global
Function Global:Get-Ldap($entry)
{
If ($entry){"LDAP://" + $entry.distinguishedName}
Else{$LdapRoot}
}
Function Global:Get-LdapParent([String]$ldap)
{
If($ldap)
{
If($ldap -eq $LdapRoot){$LdapRoot}
Else
{
$ldap -Replace "LDAP://((CN|OU)=.*?,)(OU|CN|DC)=","LDAP://`$3="
}
}
Else{$LdapRoot}
}
Function Global:Add-LdapChild([String]$ldap,[string]$cnName)
{
$cnName = $cnName.Trim()
$ldap -Replace "(LDAP://)(.*)","`$1$cnName,`$2"
}
Function Global:Rename-Ldap([String]$ldap,[string]$newName)
{
$newName = $newName.Trim()
$ldap -Replace "(LDAP://(CN|OU)=)(.*?)(,(OU|CN|DC)=.*)","`$1$newName`$4"
}