Powershell使用C#实现缩写路径


支持2.0及以后版本。

某些时候报表中的路径字符串是非常长的。如果需要你也可以缩写它,但是这样路径就失去的使用价值。最好是使用内置的API它可以灵活的缩略路径。

接下来要告诉你如何在Powershell脚本中使用C#代码:

$newType = @'

using System;

using System.Text;

using System.Runtime.InteropServices;

 

namespace WindowsAPILib

{

    public class Helper

    {

        [DllImport("shlwapi.dll", CharSet = CharSet.Auto, SetLastError = true)]

        internal static extern bool PathCompactPathEx(System.Text.StringBuilder pszOut, string pszSrc, Int32 cchMax, Int32 dwFlags);

 

        public static string CompactPath(string Path, int DesiredLength)

        {

            StringBuilder sb = new StringBuilder(260);

            if (PathCompactPathEx(sb, Path, DesiredLength + 1, 0))

            { return sb.ToString(); }

            else

            { return Path; }

        }

    }

}

'@

 

Add-Type -TypeDefinition $newType

一旦你执行这段代码,就会产生一个新的.Net类,其中会增加一个新的静态方法“CompactPath”,现在你就可以这样使用它了:

PS> $pshome 

C:WindowsSystem32WindowsPowerShellv1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 12) C:W...v1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 18) C:Windows...v1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 22) C:WindowsSys...v1.0

Powershell截取字符串并添加省略号的例子
限制字符串大小支持所有版本。确保你输出的字符串不会过长,当字符串超过你指定的长度你可以用下面办法将其缩短。if($text.Length-gt$MaxLength){$text.Subst

PowerShell中iso8601格式日期和DateTime对象互转实例
一、iso8601格式转换成DateTime对象这里主要用到datetime的静态方法staticdatetimeParseExact(strings,stringformat,System.IFormatProviderprovider)$dateTimeStr='20141231T23:59:59'$format=

Powershell实现克隆NTFS文件系统权限
支持所有版本。下面有一段简单的代码获取某个文件夹或程序的权限赋给一个其它对象。注意路径必须都是存在:$FolderToCopyFrom='C:folder1'$FolderToCopyTo='C: