用powershell开发跨平台动态网页

yizhihongxing

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日

相关文章

  • 快速高效的C#FTP文件传输库FluentFTP

    简介: FluentFTP是一个用于C#语言的FTP客户端库,它提供了许多方便的功能和API,使FTP文件传输变得简单易用。FluentFTP的主要目标是提供简单易用的API,并同时提供足够的灵活性以满足大多数开发人员的需求。 FluentFTP支持FTP和FTPS协议,可以通过简单的API进行连接、上传、下载、删除、重命名等操作。此外,它还支持断点续传、文…

    C# 2023年5月5日
    00
  • C# 泛型的简单理解(安全、集合、方法、约束、继承)分享

    下面我来详细讲解一下 C# 泛型的相关知识。 什么是泛型 泛型是 C# 语言的一个重要特性,它能使你编写出更加灵活和可重用的代码。泛型和类、接口、委托和方法一样,是 C# 中的一种类型。它允许你定义一种类型,这种类型可以在使用时指定其具体的类型参数。这相当于抽象出了一种通用的类型,只有在具体使用时才会确定其具体类型。 泛型的优势 安全性:泛型能提供编译时类型…

    C# 2023年5月15日
    00
  • c#汉诺塔的递归算法与解析

    C#汉诺塔的递归算法与解析 汉诺塔作为经典的递归问题,在计算机科学中拥有非常重要的地位。本文将介绍如何用 C# 编写汉诺塔的递归算法,以及递归算法的解析。 汉诺塔问题 汉诺塔问题是一个源自印度传说中的故事。故事讲述了三个塔座,A、B、C,之间的汉诺塔问题。在塔座A上放有n个从小到大编号的圆盘,最大的在最下面,最小的在最上面。目标是将塔座A上的圆盘全部移到塔座…

    C# 2023年6月1日
    00
  • C#实现语音播报功能

    首先需要明确的是,实现语音播报功能需要使用语音合成技术,而C#中的一个常用的语音合成接口就是System.Speech.Synthesis。 下面是实现语音播报的完整步骤: 1. 添加System.Speech.Synthesis引用 打开Visual Studio的解决方案,右键点击项目,选择“添加”->“引用”。在弹出的对话框中,找到“System…

    C# 2023年5月14日
    00
  • C# 连接Access数据时总报找不到dbo.mdb的问题

    C#连接Access数据库时,有时会出现找不到dbo.mdb的问题,这一般是因为缺少连接字符串或者连接字符串格式不正确所引起的。下面详细讲解如何解决这一问题。 1. 确认连接字符串格式正确 在C#中连接Access数据时,一般需要使用到连接字符串。连接字符串是一个包含数据库连接信息的字符串,包括数据库类型、服务器地址、用户名、密码等信息。确认连接字符串格式正…

    C# 2023年5月31日
    00
  • .Net使用Cancellation Framework取消并行任务

    .Net使用Cancellation Framework取消并行任务的攻略 在编写并行代码时,我们通常会遇到需要取消一组任务的情况,为此 .Net 提供了一套名为 “Cancellation Framework” 的机制来进行任务取消管理。本文将详细介绍 .Net 的 Cancellation Framework 的使用方法,同时提供两个示例以帮助理解。 C…

    C# 2023年6月3日
    00
  • C#使用反射(Reflect)获取dll文件中的类型并调用方法

    下面是C#使用反射获取dll文件中的类型并调用方法的完整攻略。 1. 什么是反射(Reflect) 反射是指在.NET Framework中,可以在运行时动态地获取对象的类型、成员变量、方法信息以及调用方法。通过反射,我们可以实现更加灵活的运行时程序集操作和代码构建。 .NET Framework提供了反射的相关API,包括System.Reflection…

    C# 2023年6月1日
    00
  • C#访问网络共享文件夹的方法

    C#访问网络共享文件夹的方法有以下两种: 使用.NET框架提供的System.IO命名空间和File类 使用WNetAddConnection2函数和WNetCancelConnection2函数 方法一:使用System.IO命名空间和File类 在C#中,我们可以使用System.IO命名空间中的File类来访问网络共享文件夹。具体步骤如下: 在代码中引…

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