2020年6月30日 星期二

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 把 .docx 轉 .pdf

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 把 .docx 轉 .pdf

2020-06-30

Aspose.Words for .NET - Evaluation Version Limitations
評估版的限制:會有浮水印 or 三十天功能限制
產生的 .pdf 內第一行會出現紅字
Evaluation Only. Created with Aspose.Words. Copyright 2003-2020 Aspose Pty Ltd.

NuGet 上 Aspose.Words 授權說明

.NET APIs to Process Word Documents

Aspose.Words for .NET 20.6 Release Notes (Bug 修正列表)

Find and Replace範例

測試工具:Visual Studio 2019 v16.6.2 + ASP.NET + WebForm + WebApplication
NuGet 安裝 Aspose.Words for .NET v20.6.0

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AsposeWordsReplaceText.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
    </form>
</body>
</html>


Default.aspx.cs

using Aspose.Words;
using Aspose.Words.Replacing;
using System;

namespace AsposeWordsReplaceText
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // Convert Word Document to PDF Programmatically in C# .NET – A Complete Guide
            // https://blog.aspose.com/2020/01/02/convert-word-doc-docx-to-pdf-in-csharp-net-core/
            // Load the document from disk.
            Document doc = new Document(@"C:\Temp\樣張1.docx");
            // Save as PDF
            doc.Save(@"C:\Temp\樣張1.pdf");
        }
    }
}

實際測試正常。

(完)

相關

[研究][C#][ASP.NET] 使用 Free Spire.PDF for NET v6.2.0 取代 .pdf 中的文字 (成功,要考慮文字重疊問題)

[研究][C#][ASP.NET]使用 Aspose.PDF v20.6.0 替換 .pdf 中文字 (評估版產生的 .pdf 會有紅字,商業版疑要不斷更新授權)

[研究][C#][ASP.NET] 使用 iText 7 取代 .pdf 中的文字 (失敗)

****************************************

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 取代 .docx 中文字 (目前正常)

[研究][C#][ASP.NET] 使用 FreeSpire.Doc 7.11.0 取代 .docx 中的文字 (成敗未定)

[研究][C#][ASP.NET] 用 NPOI 替換 Word (.docx) 中的文字 (成敗未定)

****************************************

[研究][C#][ASP.NET] 使用 FreeSpire.Doc 7.11.0 把 .docx 轉成 .pdf (免費版只能轉前3頁)

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 把 .docx 轉 .pdf

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 取代 .docx 中文字

[研究][C#][ASP.NET] 用 Aspose.Words for .NET v20.6.0 取代 .docx 中文字

2020-06-30

Aspose.Words for .NET - Evaluation Version Limitations
評估版的限制:會有浮水印 or 三十天功能限制
產生的 .pdf 內第一行會出現紅字
Evaluation Only. Created with Aspose.Words. Copyright 2003-2020 Aspose Pty Ltd.

NuGet 上 Aspose.Words 授權說明

.NET APIs to Process Word Documents

Aspose.Words for .NET 20.6 Release Notes (Bug 修正列表)

Find and Replace範例

測試工具:Visual Studio 2019 v16.6.2 + ASP.NET + WebForm + WebApplication
NuGet 安裝 Aspose.Words for .NET v20.6.0

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AsposeWordsReplaceText.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
    </form>
</body>
</html>


Default.aspx.cs

using Aspose.Words;
using Aspose.Words.Replacing;
using System;

namespace AsposeWordsReplaceText
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // https://docs.aspose.com/display/wordsnet/Find+and+Replace

            string dataDir = @"C:\Temp\";
            string fileName = "樣張1.docx";

            Document doc = new Document(dataDir + fileName);
            doc.Range.Replace("{$大學}", "測試大學", new FindReplaceOptions(FindReplaceDirection.Forward));

            dataDir = dataDir + "樣張1R.docx";
            doc.Save(dataDir);
        }
    }
}

對相同、複雜的 "樣張1.docx" 中,可以順利提換文字,不會像 FreeSpire.Doc 7.11.0 和 NPOI 和iText 7失敗。

(完)

[研究][C#][ASP.NET]使用 Aspose.PDF v20.6.0 替換 .pdf 中文字

[研究][C#][ASP.NET]使用 Aspose.PDF  v20.6.0 替換 .pdf 中文字

2020-06-30

Visual Studio 2019 v16.6.2 + ASP.NET + WebForm + WebApplication
NuGet 安裝 Aspose.PDF v20.6.0


Evaluation Version Limitations
1. PDF created with an evaluation watermark
The evaluation version of Aspose.PDF for .NET provides full product functionality, but all the pages in the generated PDF documents are watermarked with "Evaluation Only. Created with Aspose.PDF. Copyright 2002-2016 Aspose Pty Ltd" at the top.

2.Limit of the Number of Collection Items that can be Processed
In the evaluation version, only four items can be processed from any collection (for example, only four pages, four form fields, etc.).

評估版產生的 .pdf 會有紅字
Evaluation Only. Created with Aspose.PDF. Copyright 2002-2020 Aspose Pty Ltd.

中文字問題

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="PDFReplacebyAsposePDF.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
            <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /><br />
        </div>
    </form>
</body>
</html>



Default.aspx.cs

using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;
using System.IO;
using System.Text;

namespace PDFReplacebyAsposePDF
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private static void SetLicense()
        {
            License license = new License();
            license.SetLicense(
               new MemoryStream(
                  EncryptDecryptLicense(File.ReadAllBytes(@"C:\Temp\pdflic.txt"), Encoding.UTF8.GetBytes("SYSVIN"))
               )
            );
        }
        private static byte[] EncryptDecryptLicense(byte[] licBytes, byte[] key)
        {
            byte[] output = new byte[licBytes.Length];
            for (int i = 0; i < licBytes.Length; i++) { output[i] = Convert.ToByte(licBytes[i] ^ key[i % key.Length]); }
            return output;
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            // For complete examples and data files, please go to https://github.com/aspose-pdf/Aspose.PDF-for-.NET
            // The path to the documents directory.
            //string dataDir = RunExamples.GetDataDir_AsposePdf_Text();

            // Open document
            //Document pdfDocument = new Document(dataDir + "ReplaceTextAll.pdf");
            Document pdfDocument = new Document(@"C:\Temp\template.pdf");

            // Create TextAbsorber object to find all instances of the input search phrase
            TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("{$name}");

            // Accept the absorber for all the pages
            pdfDocument.Pages.Accept(textFragmentAbsorber);

            // Get the extracted text fragments
            TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

            // Loop through the fragments
            foreach (TextFragment textFragment in textFragmentCollection)
            {
                // Update text and other properties
                textFragment.Text = "趙錢孫";
                //textFragment.TextState.Font = FontRepository.FindFont("Verdana");     // 中文字無法顯示
                //textFragment.TextState.Font = FontRepository.FindFont("微軟正黑體");   // 錯誤用法
                textFragment.TextState.Font = FontRepository.FindFont("DFKai-SB");  // 標楷體,請看 registry 中的值
                textFragment.TextState.FontSize = 22;
                //textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Blue);
                //textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
            }

            //dataDir = dataDir + "ReplaceTextAll_out.pdf";
            // Save resulting PDF document.
            pdfDocument.Save(@"C:\Temp\template3.pdf");
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            // For complete examples and data files, please go to https://github.com/aspose-pdf/Aspose.PDF-for-.NET
            // The path to the documents directory.
            //string dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
            // Initialize license object

            Aspose.Pdf.License license = new Aspose.Pdf.License();

            // Set license
            //license.SetLicense("Aspose.Pdf.lic");
            //license.SetLicense(@"C:\Temp\pdflic.txt");
            //Console.WriteLine("License set successfully.");

            //FileStream myStream = new FileStream(@"C:\Temp\pdflic.txt", FileMode.Open);
            //// Set license
            //license.SetLicense(myStream);

            SetLicense();

            // For complete examples and data files, please go to https://github.com/aspose-pdf/Aspose.PDF-for-.NET
            // The path to the documents directory.
            //string dataDir = RunExamples.GetDataDir_AsposePdf_Text();

            // Open document
            //Document pdfDocument = new Document(dataDir + "ReplaceTextAll.pdf");
            Document pdfDocument = new Document(@"C:\Temp\template.pdf");

            // Create TextAbsorber object to find all instances of the input search phrase
            TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("{$name}");

            // Accept the absorber for all the pages
            pdfDocument.Pages.Accept(textFragmentAbsorber);

            // Get the extracted text fragments
            TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

            // Loop through the fragments
            foreach (TextFragment textFragment in textFragmentCollection)
            {
                // Update text and other properties
                textFragment.Text = "趙錢孫";
                //textFragment.TextState.Font = FontRepository.FindFont("Verdana");     // 中文字無法顯示
                //textFragment.TextState.Font = FontRepository.FindFont("微軟正黑體");   // 錯誤用法
                textFragment.TextState.Font = FontRepository.FindFont("DFKai-SB");  // 標楷體,請看 registry 中的值
                textFragment.TextState.FontSize = 22;
                //textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Blue);
                //textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
            }

            //dataDir = dataDir + "ReplaceTextAll_out.pdf";
            // Save resulting PDF document.
            pdfDocument.Save(@"C:\Temp\template3.pdf");
        }
    }
}

Button1 執行結果

(下圖) template.pdf 內容

(下圖) 取代後存檔結果


後來另外做了一個複雜的 .pdf 測試,文字依然可以順利替換掉。

********************************************************************************

(下圖) Button2 比 Button1 多處理授權問題,但是因為授權過期,無法執行。
https://docs.aspose.com/display/pdfnet/Licensing

註:Aspose.PDF 購買後是永久使用授權,但是只有一年更新,但授權檔案疑似要不斷下載更新,否則自己開發程式的若修改重新編譯,日期若比授權期限要新,就無法執行。(猜測)



(完)

[研究][C#][ASP.NET] 使用 FreeSpire.Doc 7.11.0 取代 .docx 中的文字

[研究][C#][ASP.NET] 使用 FreeSpire.Doc 7.11.0 取代 .docx 中的文字

2020-06-30

Visual Studio 2019 v16.6.2 + ASP.NET + WebForm + WebApplication

用 NuGet 安裝 FreeSpire.Doc 7.11.0

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SpireDocReplaceText.Default" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
    </form>
</body>
</html>


Default.aspx.cs
using Spire.Doc;
using System;

namespace SpireDocReplaceText
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Document document = new Document();
            
            document.LoadFromFile(@"C:\Temp\樣張1.docx"); //失敗
            //document.LoadFromFile(@"C:\Temp\test1.docx"); //成功

            document.Replace("{$大學}", "測試大學", false, true);

            document.SaveToFile(@"C:\Temp\樣張1R.docx", FileFormat.Docx);
            //System.Diagnostics.Process.Start(@"C:\Temp\樣張1R.docx");
        }
    }
}

其中 test1.docx 是自己建立的,檔案中只有單純的文字。
樣張1.docx 別人給的,內容較複雜,但是Word開啟該檔案,用 "{$大學}"去搜尋,是可以找到的。

表示 Spire.Doc 無法適用於各種 .docx 檔案。

(完)

[研究][C#][ASP.NET] 使用 iText 7 取代 .pdf 中的文字

[研究][C#][ASP.NET] 使用 iText 7 取代 .pdf 中的文字

2020-06-30

iTextSharp 5 的新版改名為 iText 7 了。

Visual Studio 2019 v16.6.2 + WebForm + ASP.NET
NuGet 安裝 iText 7.1

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="iText7ReplaceTextinPDF.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
        <asp:Label ID="Label1" runat="server" ></asp:Label>
    </form>
</body>
</html>


Default.aspx.cs
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

namespace iText7ReplaceTextinPDF
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string source = @"C:\TEMP\testt.pdf";
                string dest = @"C:\TEMP\testt2.pdf";

                PdfDocument pdfDoc = new PdfDocument(new PdfReader(source), new PdfWriter(dest));
                PdfPage page = pdfDoc.GetFirstPage();
                PdfDictionary dict = page.GetPdfObject();

                PdfObject pdfObject = dict.Get(PdfName.Contents);
                if (pdfObject is PdfStream )
                {
                    PdfStream stream = (PdfStream)pdfObject;
                    byte[] data = stream.GetBytes();
                    String replacedData = iText.IO.Util.JavaUtil.GetStringForBytes(data).Replace("@", "###");
                    stream.SetData((Encoding.UTF8.GetBytes(replacedData)));
                }
                pdfDoc.Close();
        }
    }
}

實際測試無效,字串沒有被換掉。

debug 發現 if (pdfObject is PdfStream ) 有問題,pdfObject 是 PdfArray,不是 PdfStream。
但是另外自己用Word編寫一個.docx,只有單純的文字,另存成.pdf,測試發現 pdfObject 是 pdfStream,但是依然字串沒有被換掉。

(完)

相關

Replacing PDF objects

iTextSharp Replace Text in existing PDF without loosing formation [duplicate]

Replace text in PDF file using iTextSharp(not AcroFields) [closed]

[研究][GCB]LocalGPO.msi試用 (Windows 2019)

[研究][GCB]LocalGPO.msi試用 (Windows Server 2019)

2020-06-30
2020-07-01更新

研究測試「政府組態基準(Government Configuration Baseline,簡稱GCB)」。

本測試主要在 Windows Server 2019 繁體中文標準版上套用 GCB 相關的 GCB-WindowsServer2016-gpos.zip 的 WindowsServer2016AccountSettings 和 WindowsServer2016CommonSettings 兩類 GPO。

(Windows Server 2019 和 Windows Server 2016 都是 Windows NT 10.0 核心)

********************************************************************************

1. LocalGPO操作說明.docx 2019/05/28
2. LocalGPO操作說明.pdf 2019/05/28
https://www.nccst.nat.gov.tw/GCBDownloadDetail?lang=zh&seq=1083

LocalGPO安裝程式.msi
更新日期 2013/8/1 17:44:36
https://www.nccst.nat.gov.tw/GCBDownloadDetail?lang=zh&seq=1005
以前微軟官方有提供下載,現在不提供了。



GCB-WindowsServer2016-gpos.zip 2019/9/27
https://www.nccst.nat.gov.tw/GCBDownloadDetail?lang=zh&seq=1079

套用指令
cscript   LocalGPO.wsf   /path:C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings\{4eab021f-d752-4ede-9230-e4eaedbe4172}

cscript   LocalGPO.wsf   /path:C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}

環境:Windows Server 2019 繁體中文標準版。











GCB-WindowsServer2016-gpos.zip 2019/9/27
https://www.nccst.nat.gov.tw/GCBDownloadDetail?lang=zh&seq=1079
下載,解壓


(下圖)套用看看




根據

LocalGPO Tool 只支援到 NT 6.2,並沒有支援
NT 6.3 - Windows 8.1, Windows Server 2012 R2
NT 10.0 - Windows 10, Windows Server 2016, Windows Server 2019

********************************************************************************

這裡有方法可以修改,讓 LocalGPO 可以在新版 Windows 上執行。
https://www.nccst.nat.gov.tw/GCBDownloadDetail?lang=zh&seq=1082
注意,可執行和支援不同,套用不保證 100% 成功,還原也不保證 100%,只是可以執行。

1. 編輯 C:\Program Files\LocalGPO\LocalGPO.wsf 檔案
( 若為 x64 系統,則為 C:\Program Files (x86)\LocalGPO\LocalGPO.wsf,此事該文件沒寫 )
 
2.搜尋「Sub ChkOSVersion」


If(Left(strOpVer,3) = "6.2") and (strProductType <> "1") then 
      strOS = "WS12"
改成下面,存檔。
If(Left(strOpVer,3) = "10.") and (strProductType <> "1") then 	   
      strOS = "WS12"
ElseIf(Left(strOpVer,3) = "10.") and (strProductType <> "1") then 
	   strOS = "Win8"
ElseIf(Left(strOpVer,3) = "6.3") and (strProductType <> "1") then 
	   strOS = "WS12"
ElseIf(Left(strOpVer,3) = "6.3") and (strProductType <> "1") then 
	   strOS = "Win8"

Windows Server 2019 和 Windows Server 2016 是相同核心,都為 NT 10.0,理論上 GPO 可以通用。

為了驗證套用情況,把 Windows Server 2019 遠端桌面開啟,先測試可以正常登入。

開始套用GPO,執行

C:\Program Files (x86)\LocalGPO>cscript   LocalGPO.wsf   /path:C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings\{4eab021f-d752-4ede-9230-e4eaedbe4172}

Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corp. 1996-2006, 著作權所有,並保留一切權利


Modifying Local Policy... this process can take a few moments.

Applied valid INF from C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings\{4eab021f-d752-4ede-9230-e4eaedbe4172}
No valid Audit Policy CSV to apply in C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings\{4eab021f-d752-4ede-9230-e4eaedbe4172}

Local Policy Modified!


Please restart the computer to refresh the Local Policy

C:\Program Files (x86)\LocalGPO>cscript   LocalGPO.wsf   /path:C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corp. 1996-2006, 著作權所有,並保留一切權利


Modifying Local Policy... this process can take a few moments.

Applied valid INF from C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}
Applied valid Machine POL from C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}
Applied valid User POL from C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}
Applied valid Audit Policy CSV from C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016CommonSettings\{2AB0C8F5-631B-48DB-B420-083580D08176}

Local Policy Modified!


Please restart the computer to refresh the Local Policy

C:\Program Files (x86)\LocalGPO>gpupdate   /force
正在更新原則...

電腦原則更新已成功完成。
使用者原則更新已成功完成。

C:\Program Files (x86)\LocalGPO>


執行錯誤情形 (弄錯路徑)

C:\Program Files (x86)\LocalGPO>cscript   LocalGPO.wsf   /path:C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corp. 1996-2006, 著作權所有,並保留一切權利


Modifying Local Policy... this process can take a few moments.

No valid INF file to apply in C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings
No valid Audit Policy CSV to apply in C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings

There are no settings to apply in C:\GCB\GPO\GCB-WindowsServer2016-gpos\WindowsServer2016AccountSettings


No changes made to Local Policy!


C:\Program Files (x86)\LocalGPO>


(下圖)再次執行遠端登入到該台電腦
注意,套用後,administrator 會被改名為 Renamed_Admin,且關閉遠端桌面登入。




還原執行

C:\Program Files (x86)\LocalGPO>cscript   LocalGPO.wsf   /Restore
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corp. 1996-2006, 著作權所有,並保留一切權利


Modifying Local Policy... this process can take a few moments.

Restoring Security Settings...
Restoring Administrative Template settings...
Restoring Advanced Audit Policy...
Restoring MLGPO...
Refreshing Local Group Policy...

Local Policy default values restored!


Please restart the computer to refresh the Local Policy

C:\Program Files (x86)\LocalGPO>gpupdate   /force

C:\Program Files (x86)\LocalGPO>

再次測試遠端桌面,應該可用 administrator 登入成功。
( 如果是用 LGPO.exe,則無法把遠端桌面設定還原回來,因為 LGPO提供的是匯入,不是還原,你可以匯入之前匯出的備份,但這不是還原)
PS:LGPO.exe v2.2 – Local Group Policy Object Utility

因為 LocalGPO微軟不再支援和更新,LGPO有還原限制,目前要管控欲套用的 GCB GPO 的啟用和還原,比較好只有 AD (Active Directory) 環境。

********************************************************************************
2023-12-05 補
參考

下載 LGPO.zip
解壓得到
\LGPO_30\LGPO.exe
\LGPO_30\LGPO.pdf
\LGPO_30\Microsoft Security Compliance Toolkit - Standalone Use Terms.pdf
其中 LGPO.exe 是 3.0 版,是 2020-04-14 釋出





(完)

相關

[研究][GCB]先套用GCB後安裝SQL Server 2019測試

[研究][GCB]Windows 2019 AD 主機套用 GCB、啟用、停用

[研究][GCB]已安裝SQL Server 2019後套用GCB測試

[研究][GCB]「本機安全性原則 (secpol.msc)」還原LGPO套用GCB測試

[研究][GCB]遠端桌面連線出現「系統管理員已限制您可以使用的登入類型 (網路或互動式)。」

[研究][GCB]LGPO.exe試用 (Windows 2019)

[研究][GCB]LocalGPO.msi試用 (Windows 2019)

[研究][GCB] Microsoft Security Compliance Manager 4.0 安裝試用

[研究][GCB] Microsoft Security Compliance Manager 4.0 安裝試用

[研究][GCB] Microsoft Security Compliance Manager 4.0 安裝試用

2020-06-30

研究測試「政府組態基準(Government Configuration Baseline,簡稱GCB)」。

本測試主要在 Windows Server 2019 繁體中文標準版上套用 GCB 相關的 GCB-WindowsServer2016-gpos.zip 的 WindowsServer2016AccountSettings 和 WindowsServer2016CommonSettings 兩類 GPO。

(Windows Server 2019 和 Windows Server 2016 都是 Windows NT 10.0 核心)

********************************************************************************

發現 LGPO 無法完整備份和還原 ( 預設值 疑似不備份,一但被修改,就算還原,也無法還原到原來情況),所以研究一下 LocalGPO,它疑似從 Microsoft Security Compliance Manager 抽出。

Microsoft Security Compliance Manager 4.0
https://www.microsoft.com/en-us/download/details.aspx?id=53353 

Security Compliance Manager (SCM) retired; new tools and procedures
First published on TechNet on Jun 15, 2017
https://techcommunity.microsoft.com/t5/microsoft-security-baselines/security-compliance-manager-scm-retired-new-tools-and-procedures/ba-p/701059
根據這篇,SCM被淘汰了,微軟改推
Microsoft Security Compliance Toolkit 1.0
https://www.microsoft.com/en-us/download/details.aspx?id=55319

還是測試看看。







































Microsoft Security Compliance Toolkit 1.0
https://www.microsoft.com/en-us/download/details.aspx?id=55319 
下載  Windows 10 Version 1809 and Windows Server 2019 Security Baseline.zip
解壓,因為 因為 Microsoft Security Compliance Manager  要淘汰,可能不會出新的 baseline,
試看看 Microsoft Security Compliance Manager 可否匯入 Microsoft Security Compliance Toolkit 的 Baseline。







 疑似不行?(或有敝人不知的方法)

(完)