用powershell开发跨平台动态网页

powershell 动态 网页 跨平台 asp.net dynamic cross platform

powershell 传教士 原创文章。始于 2023-04-03 允许转载,但必须保留名字和出处

---【前言】---

以【vbs,和微软jsript】为核心的asp已经淘汰了。ie11后来都不支持网页内嵌vbs了。
asp前后端不分离,jscript非正宗javascript标准,导致兼容性不佳。又没有大厂支持,连微软都不支持了。
asp可以被理解为【瘸腿的沙发,废弃的破烂,没元件件可更换的坏相机】

 

从.net跨平台那天起,asp.net就能开发跨平台动态网页。在asp.net中执行powershell代码也是早就有的,但那需要写c#代码。
在微软眼中,用c#写asp.net永远是正宫。他们不会主流去支持【用ps做动态网页开发语言】。
但我们玩powershell的是想以ps为主。我们不会用,也不想用c#去开发网站后台。

看到python家开发动态网站,我是有些羡慕嫉妒恨的。不过这种情况结束了。近期和外国同行讨论,一起研究出了示例代码。p老爷的这条瘸腿被接上了!!!

 

本例将为您展示:
1 在win,linux版powershell v7.3中,用powershell加载win,linux版asp.net库。
2 用powershell动态返回一个值,交给前端javascript去美化,去渲染页面。
------ 用纯powershell脚本&代码作为网页动态语言的例子。

---【图例:全部脚本代码,和相关库】---

 用powershell开发跨平台动态网页

 

https://gitee.com/chuanjiao10/kasini3000web

在win中运行服务器,并使用chrome浏览器测试通过。
在linux中运行服务器,并使用curl测试通过。

---【正文】---

 

使用场景:
* 运维,管理员用的中小型网站,dashboard。
* 按某按钮后,用powershell代码,加win语音库,朗读中英文文字,单词。
* 展示表格。
* 输入某些值,并用后台powershell,调用数据库客户端,把刚才的数据,写入单机库sqlite,litedb,excel文件,mysql库,sqlserver,etcd库等。
* powershell调用公有云命令行,私有云命令行,建立删除云虚拟机。网络。
* powershell调用ad,exchange,管理账户,邮箱,dns等。

案例:
目前我用它开发kasini3000的web框架。
框架还没开始,目前只是简陋的例子,勿喷。

系统需求:
powershell v7.3.x。
目前暂时只支持这个版本,因为asp.net类库我目前下载的都是.net7版本的。
未来绝对会升级到.net8的,届时需要使用powershell v7.4.x,以便ps版本和.net类库版本一致。

 

------------------【开始讲解例子】------------------

 

1 制作首页。首页上有个web form,上面有个post方法的按钮。html代码:

<form action="/getdate/" method="post">
<input type="submit" name="Logon" value="按此" />

 

2 首页,powershell代码:

$主页代码 = {
    param($HttpContext,$pagefile2)
    $pindex = Get-Content -Path $pagefile2 -Raw
    $a = [System.Text.Encoding]::UTF8.GetBytes($pindex)
    $HttpContext.Response.Body.WriteAsync($a, 0, $a.Length).AsTask().Wait()
}
$主页委托 = [powerShellDelegate]::new($主页代码,'index.html')

 

 

3 get-date命令,powershell代码:

$获取时间代码 = {
    param($HttpContext)
    $d = Get-Date -Format F
    $a = [System.Text.Encoding]::GetEncoding(936).GetBytes($d)
    $HttpContext.Response.Body.WriteAsync($a, 0, $a.Length).AsTask().Wait()
}
$获取时间委托 = [powerShellDelegate]::new($获取时间代码,'')

 

4 把首页添加到路由。把get-date命令,添加到路由【/getdate】。
注意:首页是get方法,get-date是post方法。powershell代码:

[Void][Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions]::UseEndpoints($App, { [Microsoft.AspNetCore.Builder.EndpointRouteBuilderExtensions]::MapGet($args[0],"/", $主页委托.Invoke) })
[Void][Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions]::UseEndpoints($App, { [Microsoft.AspNetCore.Builder.EndpointRouteBuilderExtensions]::MapPost($args[0],"/getdate/", $获取时间委托.Invoke) })

 

---【后记】---

当然,你还可以这样: 写一个d:\xxx\a.ps1作为回调脚本。
当每次访问http://127.0.0.1:5000/a 时, 执行此脚本。

我脑子中只有一件事:替“潘而少”老爷把,【网页动态语言】这条瘸腿接上。

-完-

原文链接:https://www.cnblogs.com/piapia/p/17293828.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用powershell开发跨平台动态网页 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 理解ASP.NET Core 依赖注入(Dependency Injection)

    理解ASP.NET Core 依赖注入(Dependency Injection) ASP.NET Core 依赖注入是一种设计模式,它允许我们将对象的创建和管理从应用程序代码中分离出来。这种分离使得应用程序更加灵活、可测试和可维护。本攻略将详细介绍ASP.NET Core 依赖注入的概念、用法和示例。 什么是依赖注入? 依赖注入是一种设计模式,它允许我们将…

    C# 2023年5月16日
    00
  • .Net 7函数Ctor与CCtor使用及区别详解

    以下是关于“.Net7函数Ctor与CCtor使用及区别详解”的完整攻略: 1. 问题描述 在.NET 7中,我们可以使用Ctor和CCtor函数来初始化对象。本攻略将介绍如何使用Ctor和CCtor函数,并解释它们之间的区别。 2. 解决方案 在.NET 7中,我们可以使用Ctor和CCtor函数来初始化对象。以下是两个示例,用于说明如何使用Ctor和CC…

    C# 2023年5月12日
    00
  • C#使用Dictionary拆分字符串与记录log方法

    一、概述 在C#编程过程中,使用Dictionary结构可以方便地将字符串拆分成基本单元,并快速处理。同时记录程序运行过程的log也是开发中非常重要的一项功能。本文将主要介绍如何使用Dictionary拆分字符串,并通过记录log方法实现字符串处理的详细攻略。 二、拆分字符串 在C#中,使用Split方法可以将字符串按照指定的分割符拆分成多个子字符串,同时也…

    C# 2023年5月31日
    00
  • WPF实现文本描边+外发光效果的示例代码

    WPF(Windows Presentation Foundation)是一种用于创建Windows桌面应用程序的技术。WPF提供了丰富的UI元素和效果,可以轻松实现文本描边和外发光效果。本文将提供WPF实现文本描边和外发光效果的完整攻略,包括创建WPF应用程序、实现文本描边、实现外发光效果、示例等。 创建WPF应用程序 要创建WPF应用程序,可以使用Vis…

    C# 2023年5月15日
    00
  • c#对list排序示例

    下面我来详细讲解一下c#对list排序的攻略。 如何对List排序 在C#中,可以在List类上使用Sort()方法对其进行排序。Sort()方法根据列表中的元素实现了IComparable泛型接口进行比较排序。默认情况下,它按照列表元素的值进行升序排序。 List<int> numList = new List<int>() { 5…

    C# 2023年6月1日
    00
  • C#泛型详解及关键字作用

    C#泛型详解及关键字作用 泛型的介绍 C#泛型是一个高度灵活且强大的特性,能够让我们编写具有通用性的代码。在不加使用泛型的情况下,我们需要对不同类型的数据写出不同的代码。而使用了泛型之后,我们可以编写出更加通用的代码,同时减少了代码的重复,增强了代码的可重用性。 泛型类别通常用于集合类库,因为集合类库只处理与它们分别正在处理的元素类型无关的逻辑。 泛型的语法…

    C# 2023年6月1日
    00
  • C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    “C#实现压缩和解压缩的方法示例【Gzip和Zip方式】”主要涉及到C#语言如何处理压缩和解压缩。下面我将详细讲解该攻略及其示例注释。 一、背景 在日常编程中,我们经常会遇到需要处理文件压缩和解压缩的需求。C#作为.NET平台的主要语言之一,提供了比较完整的压缩和解压缩支持。本攻略主要介绍C#中如何使用Gzip和Zip方式进行文件压缩和解压缩。 二、Gzip…

    C# 2023年6月7日
    00
  • C# File.WriteAllBytes()方法: 将字节数组写入指定文件

    File.WriteAllBytes()方法 File.WriteAllBytes()方法是C#中System.IO命名空间下的方法,用于将一个字节数组写入到文件中。该方法可以创建新文件,也可以覆盖已有的文件。该方法的使用非常简单,并且非常适合在处理小文件时使用。 方法签名 public static void WriteAllBytes(string pa…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部